Professional Documents
Culture Documents
Ljubivoj Cvita
Napomena autora
Mikroupravljai su jedna od vanijih karika elektrotehnike, te svojim irokim
spektrom mogunosti predstavljaju neizostavni dio modernih tehnolokih rjeenja.
Inenjeri elektrotehnike, raunarstva, mehatronike i srodnih tehnikih grana imaju
potrebu za edukacijom i usvajanjem znanja iz podruja mikroupravljaa jer trite
telekomunikacija, raunarstva i automatizacije uvelike zahtjeva iroko znanje i
usmjerenost na sva podruja tehnologije.
Skripte su izraene na bazi nastavnog materijala koji se koristi na kolegiju
Mikroupravljai na specijalistikom studiju elektrotehnike Tehnikog veleuilita u
Zagrebu. Skripte sadre i podloge za izvoenje laboratorijskih vjebi tog kolegija, a
mogu posluiti i kao inenjerski prirunik prilikom brze izrade prototipova baziranih
na upotrebi mikroupravljaa i elektronikih suelja.
Kolegij se neprekidno dorauje dodatnim sadrajima i vjebama, a zbog
nedostatka adekvatnog materijala na hrvatskom jeziku, pokrenuta je inicijativa za
pripremom i prilagodbom literature studentima i ostalim korisnicima.
MBED mikroupravljai, u odnosu na konkurentne mikroupravljae, imaju mnotvo
prednosti kojima se olakava koritenje i upravljanje.
Sadraj
UVOD ............................................................................................................................................ 8
2.
UVOD U MIKROUPRAVLJAE......................................................................................................... 9
2.1.
2.2.
2.2.1.
2.2.2.
2.2.3.
2.2.4.
2.2.5.
2.3.
3.
4.
5.
6.
MBED MIKROUPRAVLJAI.............................................................................................................. 17
2.3.1.
2.3.2.
2.3.3.
3.2.
4.2.
4.3.
4.4.
5.2.
6.2.
6.3.
7.
7.2.
7.3.
C FUNKCIJE .................................................................................................................................. 78
7.4.
7.5.
7.6.
8.
8.2.
9.
9.2.
9.3.
10.
10.1.
11.
11.1.
11.2.
12.
13.
LITERATURA.......................................................................................................................... 136
Popis vjebi
Vjeba 3-1: Spajanje LED dioda na digitalne izlaze. ................................................................................... 31
Vjeba 3-2: Spajanje niza od 4 prekidaa na MBED ................................................................................... 37
Vjeba 3-3: LED projekt sa 4 prekidaa koritenjem API komponente BusInOut ........................................ 39
Vjeba 3-4: Pulsni valni izlaz ..................................................................................................................... 40
Vjeba 3-5: Broja do deset....................................................................................................................... 40
Vjeba 4-1: Uitavanje i zapisivanje podataka s analognih ulaza ............................................................... 44
Vjeba 4-2: LED VU metar ......................................................................................................................... 47
Vjeba 4-3: Stepeniasti analogni izlazni napon ........................................................................................ 50
Vjeba 4-4: Pilasti izlazni analogni napon .................................................................................................. 52
Vjeba 4-5: Glatki pilasti izlazni analogni napon........................................................................................ 52
Vjeba 4-6: Trokutasti izlazni analogni napon ........................................................................................... 53
Vjeba 5-1:Dvostruki PWM izlaz ............................................................................................................... 57
Vjeba 5-2: Upravljanje LED osvjetljenjem pomou PWM-a ...................................................................... 58
Vjeba 5-3: Upravljanje servo motorom.................................................................................................... 60
Vjeba 5-4: Upravljanje servo pozicije potenciometrom ........................................................................... 60
Vjeba 5-5: Proizvodnja piezo zvunog signala ......................................................................................... 60
Vjeba 5-6: Hrvatska himna ...................................................................................................................... 61
Vjeba 5-7: Sviranje piezo zvunikom ....................................................................................................... 62
Vjeba 6-1: Jednostavna rutina tajmera .................................................................................................... 64
Vjeba 6-2: Koritenje dva tajmera ........................................................................................................... 65
Vjeba 6-3: Kvadratni izlazni signal uz primjenu 'Ticker'-a......................................................................... 67
Vjeba 6-4: Ispitivanje hardverskog prekida.............................................................................................. 69
Vjeba 6-5: Titranje kontakta .................................................................................................................... 70
Vjeba 6-6: Kontrola signala tipkala osciloskopom.................................................................................... 71
Vjeba 6-7: Paralelni rad tajmera i hardveskog prekida ............................................................................ 71
Vjeba 7-1 Ispitivanje 7-segmentnog zaslona ............................................................................................ 76
Vjeba 7-2: Ponovljeno ispitivanje kao na V7-1 ......................................................................................... 77
Vjeba 7-3: Dizajniranje C funkcije ............................................................................................................ 78
Vjeba 7-4: Izvravanje C funkcije ............................................................................................................. 79
Vjeba 7-5: Ponovna upotreba funkcija i promjena cpp koda ................................................................... 79
Vjeba 7-6: Modularni MBED projekt ........................................................................................................ 81
Vjeba 7-7: Projekt sa vie izvornih datoteka ............................................................................................ 86
Vjeba 7-8: Modularni projekt Servo ..................................................................................................... 89
Vjeba 8-1: Knightrider LED efekt ........................................................................................................ 100
Vjeba 8-2: Knightrider LED efekt sa BusOut objektom........................................................................ 101
1
Vjeba 8-3: Prikaz teksta na LCD zaslonu koritenjem objekta iz biblioteke ............................................ 105
Vjeba 8-4: Prikaz varijabli na LCD-u ....................................................................................................... 106
Vjeba 8-5: Prikaz analognih ulaznih podataka na LCD-u ........................................................................ 107
Vjeba 8-6: Izrada voltmetra ................................................................................................................... 107
Vjeba 9-1: Upotreba MSPG_I2C_SLAVE modula .................................................................................... 116
Vjeba 9-2: Mjerenje napona na ulazu MSPG_I2C_SLAVE ....................................................................... 116
Vjeba 9-3: Dva modula MSPG_I2C_SLAVE na istoj sabirnici ................................................................... 117
Vjeba 9-4: Prikaz broja na LED displeju SLAVE modula .......................................................................... 118
Vjeba 11-1: Stvaranje datoteke i upis .................................................................................................... 129
Vjeba 11-2: Prikaz sadraja datoteke na terminalu ................................................................................ 129
Vjeba 11-3: Koritenje fprintf naredbe .................................................................................................. 130
Vjeba 11-4: Unos teksta u terminal ....................................................................................................... 131
Vjeba 11-5: Biljeenje analognih podataka ............................................................................................ 131
Popis tablica
Tablica 1: Opis prikljunih signala MBED-a LPC1768 ................................................................................. 28
Tablica 2: Digitalne terminologije ............................................................................................................. 29
Tablica 3: Funkcija digitalnog izlaza........................................................................................................... 30
Tablica 4: Funkcija digitalnog ulaza ........................................................................................................... 36
Tablica 5: Funkcija analognog ulaza .......................................................................................................... 44
Tablica 6: Prikaz poloaja potenciometra pomou integriranih LED dioda ................................................ 47
Tablica 7: Funkcija analognog izlaza .......................................................................................................... 49
Tablica 8: Funkcija pulsno-irinske modulacije .......................................................................................... 56
Tablica 9 MBED Timer objekt .................................................................................................................... 64
Tablica 10: Funkcija MBED Ticker .............................................................................................................. 67
Tablica 11: Funkcija 'InterruptIn' ............................................................................................................... 69
Tablica 12: Kodiranje izlaznog bajta za pogon 7-segmentnog zaslona ....................................................... 73
Tablica 13: Funkcija digitalne izlazne sabirnice ......................................................................................... 98
Tablica 14: Prikljuci LCD zaslona ............................................................................................................ 102
Tablica 15: Spajanje LCD zaslona sa MBED-om ........................................................................................ 103
Tablica 16:Funkcija IC ............................................................................................................................ 111
Tablica 17: Komunikacijski protokol MSPG_I2C_SLAVE .......................................................................... 114
Tablica 18 Povezivanje MBED-a sa MSP430G .......................................................................................... 115
Tablica 19: Funkcija SPI ........................................................................................................................... 122
2
Popis slika
Slika 1: Mikroupravljai .............................................................................................................................. 9
Slika 2: Mikroprocesor .............................................................................................................................. 10
Slika 3: Mikroupravlja ............................................................................................................................. 10
Slika 4: Tvrtka ARM Holdings .................................................................................................................... 11
Slika 5: Izbor mikroupravljaa ................................................................................................................... 12
Slika 6: Struna literatura.......................................................................................................................... 13
Slika 7: Konaan odabir mikroupravljaa .................................................................................................. 14
Slika 8: MBED LPC1768 ............................................................................................................................. 17
Slika 9: Tehnologija 'Rapid Prototyping' .................................................................................................... 18
Slika 10: USB programsko suelje.............................................................................................................. 18
Slika 11: Online prevoditelj ....................................................................................................................... 19
Slika 12: Apstraktna biblioteka ................................................................................................................. 20
Slika 13: Proces rada MBED-a ................................................................................................................... 21
Slika 14: Povezivanje MBED mikroupravljaa sa raunalom ...................................................................... 21
Slika 15: MBED modul prikazan kao USB disk ........................................................................................... 22
Slika 16: Web stranica www.mbed.org ..................................................................................................... 22
Slika 17: Pokretanje prevoditelja na MBED korisnikoj stranici ................................................................. 23
Slika 18: Otvaranje projekta u radnom prostoru ....................................................................................... 24
Slika 19: Online prevoenje programa ...................................................................................................... 24
Slika 20: Pohrana '.bin' datoteke na MBED USB disk ................................................................................. 25
Slika 21: Programiranje MBED-a pritiskom na plavu tipku ........................................................................ 25
Slika 22 Regulatori napona na MBED-u ..................................................................................................... 27
Slika 23 Prikljuci MBED-a LPC1768........................................................................................................... 27
Slika 24: Digitalni izlazi MBED-a ................................................................................................................ 30
Slika 25: Definiranje digitalnog izlaza ........................................................................................................ 30
Slika 26: Spajanje LED diode ..................................................................................................................... 31
Slika 27: Uporaba LED dioda na MBED prikljucima .................................................................................. 32
Slika 28: Primjer cpp koda za LED projekt ................................................................................................. 32
Slika 29 Prikljuak osciloskopa na model .................................................................................................. 33
Slika 30 Y-t oscilogram izlaza na p5 i p6 .................................................................................................... 34
Slika 31 Pojaala digitalnih izlaza .............................................................................................................. 35
Slika 32: Definiranje digitalnog ulaza ........................................................................................................ 36
Slika 33 Sklopka kao digitalni ulaz ............................................................................................................. 37
Slika 34: Spajanje prekidaa na MBED ...................................................................................................... 37
Slika 35: Uvoenje ulaznog digitalnog prekidaa na MBED ....................................................................... 38
Slika 36 Programski kod za vjebu 3-3 ....................................................................................................... 39
4
Uvod
1. Uvod
Kako bi korisnici, tj. studenti usvojili znanja o upotrebi mikroupravljaa, prvo je
dan uvod u svijet mikroupravljaa gdje se ukazuje da su mikroupravljai neizostavni
dio modernih tehnolokih rjeenja, imaju iroki krug korisnika, te nalaze iroku
primjenu u mnogobrojnim granama industrije.
Takoer, navedeni su kriteriji u procesu izbora mikroupravljaa te je jasno
navedeno zato je izabran LPC1768 na modulu MBED i to ga ini 'drugaijim'.
Nadalje prikazano je teoretsko i praktino koritenje MBED-a kao novog
koncepta brzog razvoja prototipova. Detaljno su objanjeni:
1. Digitalni ulazi i izlazi
2. Analogni ulazi i izlazi
3. Pulsno-irinska modulacija
4. Dizajn modula i tehnike programiranja
5. Paralelni podaci i komunikacija
6. Serijska komunikacija sa IC-om
7. Serijska komunikacija sa SPI-om
8. Memorija i upravljanje podacima
9. Tajmeri i prekidi
Na kraju ove skripte, na proizvoljnom primjeru je demonstrirana upotreba MBED
mikroupravljaa u TVZ-ovom laboratoriju za ugradbene sustave.
2. Uvod u mikroupravljae
2.1. Svijet mikroupravljaa
Svakim danom, mikroupravljai postaju sve zastupnjeniji u svijetu i njihova
primjena konstantno raste.
Do 80-tih godina 20-tog stoljea mikroraunala su koristili te primjenjivali
znanstvenici raunarstva. Danas, mikroupravljai su neizostavni dio modernih
tehnolokih rjeenja, te imaju iroki krug korisnika.
Nalaze iroku primjenu u ureajima za domainstvo, a takoer se upotrebljavaju
u podrujima kao to su automobilska industrija, rasvjeta, komunikacije,
niskoenergetski potroaki ureaji, sustavi automatizacije, komunikacijski sustavi
itd.
Slika 1: Mikroupravljai
Slika 2: Mikroprocesor
Slika 3: Mikroupravlja
10
Intelektualno vlasnitvo (eng. intellectual property) je pravni pojam koji se odnosi na kreacije
uma za koje postoje zakonska autorska prava, a primjenjuje se primjerice za zatitne znakove,
patente, industrijski dizajn, odjeu, a u nekim nadlenostima i poslovne tajne.
11
ima urede i dizajnerske centre irom svijeta (Tajvan, Francuska, Indija, vedska i
SAD). ARM omoguuje i stvara novu tehnologiju koja se nalazi u jezgri naprednih
digitalnih proizvoda. Najvei i najpoznatiji klijeni ARM-a su Intel, TSMC, Samsung,
TI, NEC, ST, ZTE, Broadcom, AMD, Infineon, Apple, Qualcomm, Fujitsu, UMC,
Lenovo itd.
raspoloivost
razvojni alati
podrka proizvoaa
stabilnost i pouzdanost nabave.
Mogue je da se cijeli proces iterativno ponavlja dok se ne doe do optimalnog
rjeenja, odnosno odluke.
14
Zahtjevi na napajanje
17
18
Online4 kompajler
Nema potrebe za provoenjem nikakve instalacije; IDE povezivanje
temeljeno je na Internet pretraivau. Mogue je trenutno kompajliranje
primjera ili pisanje vlastitog koda. Koristi se najbolji u klasi RealView
C/C++ prevoditelj.
Izvorne datoteke, i prevoditelj (kompajler) nalaze se na zajednikom
serveru (Cloudcomputing) tako da registrirani korisnik moe pristupiti
svom projektu sa svakog raunala i svake lokacije gdje je pristupana
internetska mrea. Izvrna datoteka, dobivena prevoenjem, prenosi se
(download) u memoriju raunala.
Iz te memorije, datoteka se treba prenijeti u memoriju MBED-a koji se u
odnosu na raunalo ponaa kao vanjska FLASH memorija.
20
21
Potrebno je dvostruko kliknuti na ".htm" fajl na MBED USB disku ili pokrenuti
MBED korisniku podrku na web stranici www.develover.mbed.org. Zatim se
izvrava prijava ili registracija novog rauna, ime se ujedno i omoguava poetak
koritenja MBED mikroupravljaa.
25
Dual in-line package (kratica DIP ili DIL) oblik je pakiranja integriranih krugova za iroku
Na MBED postolju se nalaze 4 integrirane LED diode koje slue kao digitalni
izlazi, koji su posebno namijenjeni za rad bez potrebe za dodatnim icama ili
spojevima. Na slici 23 prikazani su svih 40 prikljuaka MBED-a sa svojim oznakama.
27
Opis
GND
Uzemljenje
VIN
Napajanje od 4,5V do 9V
VB
Napajanje od 3V za RTC
nR
Glavni reset
p5...p30
p5...p7; p11...p13
SPI suelje
Serijsko povezivanje
IC suelje
p15...p20
p18
Analogni izlaz
p21...p26
p29, p30
CAN suelje
D+
D-
TD+
TD-
RD+
RD-
IF+
IF-
VU
VOUT
0V
3,3V
Off (iskljuen)
On (ukljuen)
Set (postavljen)
False (nije)
True (je)
Napomena: termini "logika 0" i "logika 1" jednostavno se nazivaju "0" i "1"
29
DigitalOut
Funkcija
DigitalOut
write
read
operator =
operator int()
Digitalni izlaz
Koritenje
stvori objekt DigitalOut koji je spojen na definirani pin izlaza
postavi izlaz, definiran kao 0 ili 1 (int)
ita postavljeni izlaz, prikazan kao 0 ili 1 (int)
skraenica za pisanje
skraenica za itanje
izlaz1(p5);
izlaz2(p6);
izlaz3(p7);
semafor(LED1); // izlaz na ugraenu svjetleu diodu LED1
Slika 25: Definiranje digitalnog izlaza
30
31
PC
V3.3
IC1
1
2
3
4
5
6
7
8
9
D1
D2
10
11
12
13
14
15
16
17
18
R1
(499 ohm)
R2
(499 ohm)
19
20
GND
VIN
VOUT
USB
VU
VB
IF-
nR
IF+
P5
RD-
P6
RD+
P7
TD-
P8
TD+
P9
P10
P11
P12
P13
D-
MBED
NXP
LPC1768
D+
P30
P29
P28
P14
P27
P15
P26
P16
P25
P17
P24
P18
P23
P19
P22
P20
P21
a) shema
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
b) prototipna ploica
Kreirajte novi program za vanjski LED projekt i unesite sljedei cpp kod (slika 28);
#include "mbed.h"
DigitalOut redled(p5);
DigitalOut greenled(p6);
int main() {
while(1) {
redled = 1;
greenled = 0;
wait(0.2);
redled = 0;
greenled = 1;
wait(0.2);
}
}
Slika 28: Primjer cpp koda za LED projekt
33
34
35
DigitalIn
Funkcija
DigitalIn
read
mode
operator int()
Digitalni ulaz
Koritenje
stvori objekt DigitalIn koji je spojen na definirani pin ulaza
ita ulaz, prikazan kao 0 ili 1 (int)
postavi mod ulaznog pina (PullUp, PullDown, PullNone, OpenDrain)
skraenica za itanje
Na slici 33 prikazana su tri mogua naina; detalj (a) prikazuje dvopolnu sklopku
(eng. SPDT) koja preklapa digitalni ulaz mikroupravljaa ili na GND ili na 3,3V. Detalj
(b) prikazuje jednopolni prekida (eng. SPST) koji kada je spojen kratko spaja GND
potencijal na digitalni ulaz (logika 0), a kada je odspojen potencijal 3,3V preko
otpornika R dolazi na digitalni ulaz (logika 1). Detalj (c) prikazuje jednopolni
prekida koji kada je spojen kratko spaja 3,3V potencijal na digitalni ulaz (logika
1), a kada je odspojen potencijal 0V preko otpornika R dolazi na digitalni ulaz
(logika 0). U sluaju (b) moe se koristiti i ugraeni otpornik u mikroupravljau (eng.
PullUp), a u sluaju (c) ugraeni otpornik (eng. PullDown).
36
IC1
1
2
3
4
5
6
7
SW1
8
9
D1
D2
10
11
12
13
SW4
14
15
16
17
18
R1
(499 ohm)
R2
(499 ohm)
19
20
GND
VIN
VB
VOUT
USB
VU
IF-
nR
IF+
P5
RD-
P6
RD+
P7
TD-
P8
TD+
P9
D-
P10
P11
P12
P13
MBED
NXP
LPC1768
D+
P30
P29
P28
P14
P27
P15
P26
P16
P25
P17
P24
P18
P23
P19
P22
P20
P21
a) shema
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
b) prototipna ploica
37
38
//green led is on
//red led is off
//green led is on
//red led is on
40
41
42
43
AnalogIn
Funkcije
AnalogIn
read
read_u16
operator float
Analogni ulaz
Koritenje
Stvori objekt AnalogIn za analogni ulaz spojen na definirani pin
ita ulazni napon prikazan u obliku realnog broja
u rasponu [0,0 do 1,0]
ita ulazni napon prikazan u obliku cijelog broja (unsigned short)
u rasponu [0x0, 0xFFFF]
operator float An -> skraenica za itanje
Potrebno je pokrenuti novi MBED projekt i unijeti sljedei cpp kod koji
kontinuirano prikazuje vrijednost analognog ulaza na monitoru PC-a na kojeg je
MBED modul prikljuen:
//Reads input through the ADC, and transfers to PC terminal
#include "mbed.h"
Serial pc(USBTX, USBRX);
AnalogIn Ain(p20);
float ADCdata;
int main() {
pc.printf("ADC Data Values... \n\r");
while (1) {
ADCdata=Ain;
pc.printf("%f \n\r",ADCdata);
wait (0.5);
}
}
Slika 42: Primjer cpp koda za uporabu potenciometra
'pc.printf("%f
\n\r",ADCdata);'
zamjeniti
naredbom
'pc.printf("%f
\n\r",ADCdata*3.3);'
47
48
AnalogOut
Funkcija
AnalogOut
write
write_u16
read
operator=
operator float()
Analogni izlaz
Koritenje
Stvori objekt AnalogOut za analogni izlaz spojen na definirani
pin
Postavi izlazni napon, definiran kao postotak (float)
Postavi izlazni napon, prikazan u obliku cijelog broja (unsigned
short) u podruju [0x0, 0xFFFF]
ita trenutno postavljeni izlazni napon, mjeren kao postotak
(float)
skraenica za pisanje
skraenica za itanje
// 0.25*3.3V = 0.825V
// 0.5*3.3V = 1.65V
// 0.75*3.3V = 2.475V
50
51
53
5. Pulsno-irinska modulacija
5.1. Pojam irinsko-pulsne modulacije
Pulsno-irinska modulacija (PWM) je jednostavna metoda koritenja pravokutnog
digitalnog oblika kojim se upravlja analognom varijablom, u veini sluajeva
naponom ili strujom. PWM se koristi kao jeftinija alternativa DAC konverziji u
razliitim granama tehnike, tj. od komunikacija do automatskog upravljanja.
Perioda se obino odrava konstantnom, a irina pulsa (vrijeme izlaza u logikoj
1) se mijenja. Aktivni ciklus8 je dio vremena u kojem je puls u stanju "1", a izraava
se u postocima:
Aktivni ciklus = 100% * (pulsno "1" vrijeme) / (trajanje periode)
Aktivni ciklus toka PWM-a, ima svoju srednju vrijednost, koja je na slici 53
prikazana isprekidanom linijom. Ako je "1" vrijeme male vrijednosti, srednja
vrijednost je niska; a ako je "1" vrijeme velike vrijednosti, srednja vrijednost je visoka.
Upravljanjem aktivnog ciklusa, upravlja se prosjena vrijednost.
Srednja vrijednost napona moe se dobiti iz PWM toka upotrebom
niskopropusnog filtera. U ovom sluaju (slika 54), ako su PWM frekvencija
vrijednosti otpora (R) i kapaciteta (C) na odgovarajui nain izabrani, Uiz postaje
analogni izlaz. U praksi, ova vrsta filtriranja nije uvijek potrebna jer mnogi fizikalni
Uul
D
L
Iiz
Slika 55 Induktivno- radni teret
mogue spojiti 6 PWM izlaza (pinovi 21-26). Svi PwmOut izlazi dijele isto vrijeme
periode (slika 56).
PwmOut
Funkcije
PwmOut
write
read
period
period_ms
period_us
pulsewidth
pulsewidth_ms
pulsewidth_us
operator=
operator float()
56
57
// tx, rx
int main() {
PWM1.period(0.010);
// set PWM period to 10 ms
PWM1=0.8;
// set duty cycle to 80%
pc.printf("Control of LED dimmer by host terminal\n\r");
pc.printf("Press 'u' = brighter, 'd' = dimmer\n\r");
while(1) {
char c = pc.getc();
wait(0.001);
if((c == 'u') && (brightness < 1.0)) {
brightness += 0.1;
PWM1= brightness;
}
if((c == 'd') && (brightness > 0.0)) {
brightness -= 0.1;
PWM1= brightness;
}
pc.printf("%c %1.3f \n \r",c,brightness);
}
}
Slika 59: Upravljanje LED osvjetljenjem pomou PWM-a
signala osovina servo motora moe biti postavljena u odreene kutne pozicije. Sve
dok na ulaznoj liniji postoji modulirani signal, servo e zadravati kutnu poziciju
osovine. Promjenom moduliranog signala, mijenja se kutna pozicija osovine.
Dijagram na slici 60 prikazuje PWM vremenske uvjete za kontrolu pozicije servo
motora izmeu 0 i 180 stupnjeva.
Servo zahtjeva vee struje nego to USB standard omoguuje, stoga je bitno da
je servo napajan koristei vanjsko napajanje od 4 baterije AA (6V).
59
10
61
#include "mbed.h"
PwmOut buzzer(p21);
/frekvencija melodije "Lijepa naa"
float frequency[]={659.3, 659.3, 659.3, 587.3, 587.3, 523.3, 523.3, 392, 349.2, 329.6, 349.2,
392, 440, 392, 349.2, 329.6, 349.2, 392, 659.3, 659.3, 659.3, 587.3, 587.3, 523.3, 523.3, 392,
349.2, 329.6, 349.2, 392, 440, 493.9, 493.9, 587.3, 523.3, 493.9, 493.9, 493.9, 440, 493.9,
493.9, 523.3, 587.3, 493.9, 587.3, 587.3, 587.3, 587.3, 587.3, 523.3, 493.9, 440, 392, 659.3,
659.3, 659.3, 587.3, 587.3, 523.3, 523.3, 392, 349.2, 329.6, 349.2, 392, 440, 493.9, 493.9,
587.3, 523.3, 0};
//trajanje nota
float beat[]={1, 1, 1.5, 0.5, 0.5, 0.5, 1, 2, 0.5, 0.5, 0.5, 0.5, 2, 0.5, 0.5, 0.5, 0.5, 2, 1, 1, 1.5, 0.5,
0.5, 0.5, 1, 2, 0.5, 0.5, 0.5, 0.5, 2, 0.5, 0.5, 1, 2, 1, 1, 1.5, 0.5, 1, 0.5, 0.5, 1.5, 0.5, 0.5, 0.5, 0.5,
0.5, 1, 1, 1, 1, 2, 1, 1, 1.5, 0.5, 0.5, 0.5, 1, 2, 0.5, 0.5, 0.5, 0.5, 2, 0.5, 0.5, 1, 2, 0.5};
int main() {
while (1) {
for (int i=0; i<=70; i++) {
buzzer.period(1/(frequency[i]));
// set PWM period
buzzer=0.5;
// set duty cycle
wait(0.5*beat[i]);
// hold for beat period
}}}
Slika 65: Primjer cpp koda za upotrebu piezo zvunika
6. Tajmeri i prekidi
6.1. Upravljanje vremenom i dogaajima u ugraenim
sustavima
Mnogi ugraeni sustavi zahtjevaju vremensko upravljanje visoke preciznosti, te
sposobnost da trenutno reagiraju u kritinim sluajevima. Npr. video kamera mora
snimiti slikovne podatke u specifinim vremenskim intervalima, sa visokim stupnjem
preciznosti, kako bi se omoguila besprijekorna reprodukcija. Automobilski sustav
mora biti u mogunosti trenutno odgovoriti na senzor detekcije sudara, kako bi se
aktivirao putnikov zrani jastuk.
Prekidi omoguuju da softverski procesi budu zaustavljeni tijekom vremena
izvravanja programskih procesa vieg prioriteta. Prekidne rutine mogu biti
programirane za izvravanje vremenskih dogaaja ili pak dogaaja koje uzrokuje
vanjska pobuda u hardveru. Rutine ije je izvravanje inicirano vanjskom pobudom
u hardveru (npr. klik mia ili ulazni signal iz drugog programa) nazivaju se 'rutine
upravljane dogaajem' (eng. event driven).
Upoznavanje s tajmerima11
Prekidi u ugraenim sustavima se mogu promatrati kao funkcije koje su pozivane
specifinim dogaajima, a ne izravno iz koda programa. Najjednostavniji tip prekida
je onaj u kojem se automatski poveava vrijednost brojaa u periodikim
vremenskim intervalima, stoga veina mikroupravljaa ima ugraene tajmere ili
'real-time' prekide koji su koriteni u tu svrhu. Kod glavnog programa se izvrava u
specifinim vremenskim intervalima. Primjerice, moe se postaviti neke dijelove
softvera da djeluju svakih 10ms, a druge dijelove svakih 100ms; to se naziva
'programiranje prema rasporedu' (eng. scheduled programming).
11
64
#include "mbed.h"
Timer timer1;
DigitalOut output1(p5);
void task1(void);
// task function
// toggle output
65
// toggle output1
// toggle output2
66
Ticker
Koritenje
Pridjelite funkciju koja se treba pozvati pojavom tickera,
navoenjem intervala u sekundama
Pridjelite funkciju (lana objekta ili klase) koja se treba pozvati
pojavom tickera, navoenjem intervala u sekundama
Pridjelite funkciju koja se treba pozvati pojavom tickera,
navoenjem intervala u us
Pridjelite funkciju (lana objekta ili klase) koja se treba pozvati
pojavom tickera, navoenjem intervala u us
Odvojite funkciju
#include "mbed.h"
Ticker flipper1;
Ticker flipper2;
DigitalOut led1(p5);
DigitalOut led2(p6);
void flip1() {
led1 = !led1;
}
void flip2() {
led2 = !led2;
}
// flip 1 function
// flip 2 function
int main() {
led1 = 0;
led2 = 0;
flipper1.attach(&flip1, 0.2);
flipper2.attach(&flip2, 1.0);
// spin in a main loop
// flipper will interrupt it to call flip
while(1) {
wait(0.2);
}
}
Slika 69: Primjer cpp koda koji koristi dva 'Ticker'-a
68
InterruptIn
Funkcija
InterruptIn
rise
rise
fall
fall
mode
Prekidni ulaz
Koritenje
Kreiraj funkciju InterruptIn povezanu na navedeni prikljuak
Pridjeli funkciju koja se poziva ako se desi rastui brid signala na
ulazu
Pridjeli funkciju (lana objekta ili klase) koja se poziva ako se desi
rastui brid signala na ulazu
Pridjeli funkciju koja se poziva ako se desi padajui brid signala
na ulazu
Pridjeli funkciju (lana objekta ili klase) koja se poziva ako se desi
padajui brid signala na ulazu
Postavi mod ulaznog prikljuka (pull-up, pull-down, pull-none)
Napomena: svaki digitalni ulaz moe se koristiti kao prekid osim pinova 19 i 20
void toggle(void);
// function prototype
int main() {
button.rise(&toggle);
}
void toggle() {
led1=!led1;
}
Slika 70: Primjer cpp koda za vjebu 6-4
69
Stoga, lako je uoiti kako jedan pritisak na tipkalo moe izazvati vie prekida, a
time LED dioda moe postati nesinkronizirana sa tipkalom. Zato je potrebno
'debounsirati' prekida, tj. ukloniti neeljeno titranje signala koje moe uzrokovati
prestanak sinkronizacije sa tajmerom.
Vjeba 6-5: Titranje kontakta
Koritenjem MBED InterruptIn biblioteke, kreirajte program za ukljuivanje, tj.
paljenje LED diode svaki put kad digitalno tipkalo ulaza doe u stanje '1'. Kako bi se
izbjegli viestruki prekidi, provedite 'debounce' broja.
#include "mbed.h"
InterruptIn button(p18);
DigitalOut led1(p5);
Timer debounce;
void toggle(void);
int main() {
debounce.start();
button.rise(&toggle);
}
void toggle() {
if (debounce.read_ms()>200)
led1=!led1;
debounce.reset();
}
71
ZNAMENKA
0
1
2
3
4
5
6
7
8
9
73
Navedeni cpp kod na slici 76 koristi digitalni izlaz za svaki LED segment i mijenja
stanja (on/off) LED dioda, kako bi se prikazao broj 3.
#include "mbed.h"
DigitalOut A(p5);
DigitalOut B(p6);
DigitalOut C(p7);
DigitalOut D(p8);
DigitalOut E(p9);
DigitalOut F(p10);
DigitalOut G(p11);
DigitalOut DP(p12);
int main() {
A=1;
B=1;
C=1;
D=1;
E=0;
F=0;
G=1;
DP=0;
}
Iako prikazani primjer cpp koda djeluje sloen, u izvrnom dijelu to je vrlo
jednostavna operacija, meutim:
74
75
// segment A
// segment B
// segment C
// segment D
// segment E
// segment F
// segment G
// segment DP
int main() {
while (1) {
// infinite loop
A=1; B=1; C=1; D=1; E=1; F=1; G=0; DP=0;
wait(0.2);
A=0; B=1; C=1; D=0; E=0; F=0; G=0; DP=0;
wait(0.2);
A=1; B=1; C=0; D=1; E=1; F=0; G=1; DP=0;
wait(0.2);
A=1; B=1; C=1; D=1; E=0; F=0; G=1; DP=0;
wait(0.2);
A=0; B=1; C=1; D=0; E=0; F=1; G=1; DP=0;
wait(0.2);
A=1; B=0; C=1; D=1; E=0; F=1; G=1; DP=0;
wait(0.2);
A=1; B=0; C=1; D=1; E=1; F=1; G=1; DP=0;
wait(0.2);
A=1; B=1; C=1; D=0; E=0; F=0; G=0; DP=0;
wait(0.2);
A=1; B=1; C=1; D=1; E=1; F=1; G=1; DP=0;
wait(0.2);
A=1; B=1; C=1; D=1; E=0; F=1; G=1; DP=0;
wait(0.2);
}
}
76
// ABCDEFGDP
// infinite loop
// 00111111 binary LEDs to '0'
// 00000110 binary LEDs to '1'
// 01011011 binary LEDs to '2'
// 01001111 binary LEDs to '3'
// 01100110 binary LEDs to '4'
// 01101101 binary LEDs to '5'
// 01111101 binary LEDs to '6'
// 00000111 binary LEDs to '7'
// 01111111 binary LEDs to '8'
// 01101111 binary LEDs to '9'
77
7.3. C funkcije
Ispravan nain sintakse C funkcije prikazan je na slici 79:
Povratni_tip Ime _funkcije (tip_varijable_1 Ime_varijable_1, tip_varijable_2
Ime_varijable_2,,)
{
... ovdje upisati C kod
... ovdje upisati C kod
return varijabla povratnog tipa
}
Slika 79: Sintaksa C funkcije
// function 'SegConvert'
//DPGFEDCBA
// 00111111 binary
// 00000110 binary
// 01011011 binary
// 01001111 binary
// 01100110 binary
// 01101101 binary
// 01111101 binary
// 00000111 binary
// 01111111 binary
// 01101111 binary
78
return SegByte;
}
Slika 81: Primjer dizajniranja funkcije
Ova funkcija koristi C 'switch/case' naredbu koja se izvrava identino kao 'if'
naredba, ali sa zadanim moguim uvjetima
// main program
// infinite loop
// function 'SegConvert'
//DPGFEDCBA
// 00111111 binary
// 00000110 binary
// 01011011 binary
// 01001111 binary
// 01100110 binary
// 01101101 binary
// 01111101 binary
// 00000111 binary
// 01111111 binary
// 01101111 binary
79
// A,B,C,D,E,F,G,DP
// function prototype
// main program
// infinite loop
// counter loop 1
// tens column
// counter loop 2
// units column
80
(mogu
se
unijeti
vrijednosti
Koristi se MBED serijsko USB suelje za komunikaciju sa raunalom, i dva 7segmentna zaslona kao u primjeru vjebe 7-5. Potrebno je kreirati novi projekt i
unijeti sljedei cpp kod (slika 86).
81
// function prototype
// function prototype
// function prototype
// function prototype
// variable declarations
int main() {
// main program
SegInit();
// call function to initialise the 7-seg displays
HostInit();
// call function to initialise the host terminal
while (1) {
// infinite loop
data2 = GetKeyInput();
// call function to get 1st key press
Seg2=SegConvert(data2); // call function to convert and output
data1 = GetKeyInput();
// call function to get 2nd key press
Seg1=SegConvert(data1); // call function to convert and output
pc.printf(" ");
// display spaces between 2 digit numbers
}
}
// add function code here...
Slika 86: Programski cpp kod za vjebu 7-6
// initialise to zero
// initialise to zero
void HostInit(void) {
pc.printf("\n\rType two digit numbers to be displayed on the 7-seg display\n\r");
}
char GetKeyInput(void) {
char c = pc.getc();
pc.printf("%c",c);
return (c&0x0F);
}
83
12
Vano je spomenuti, ovdje nije potrebno definirati specifine MBED prikljuke, jer
oni su ve specificirani u objektnoj deklaraciji u 'functions.cpp'
// variable declarations
int main() {
SegInit();
displays
HostInit();
while (1) {
data2 = GetKeyInput();
Seg2 = SegConvert(data2);
data1 = GetKeyInput();
Seg1 = SegConvert(data1);
pc.printf(" ");
}
}
// main program
// call function to initialise the 7-seg
// call function to initialise the host terminal
// infinite loop
// call function to get 1st key press
// call function to convert and output
// call function to get 2nd key press
// call function to convert and output
// display spaces between 2 digit numbers
// initialise to zero
// initialise to zero
void SegInit(void);
char SegConvert(char SegValue);
// function prototype
// function prototype
#endif
Slika 97: Datoteka 'SegDisplay.h' za vjebu 7-7
88
// communication to host PC
void HostInit(void) {
pc.printf("\n\rType two digit numbers to be displayed on the 7-seg display\n\r");
}
char GetKeyInput(void) {
char c = pc.getc();
0x39) pc.printf("%c",c);
return (c&0x0F);
}
// get keyboard data (note numerical ascii range 0x30// print ascii value to host PC terminal
// return value as non-ascii (bitmask c with value 0x0F)
void HostInit(void);
char GetKeyInput(void);
// function prototype
// function prototype
#endif
Slika 99: Datoteka 'HostIO.h' za vjebu 7-7
korisno da drugi
programeri ne moraju ponovo izumiti kota kada ele koristiti neku perifernu
jedinicu ili funkcionalnost. Pri tom se biblioteka moe smatrati da je blok kojim se
gradi neki program. Biblioteka nije sam program odnosno nema main() funkciju, ali
moe biti korisna i viekratno upotrebljiva komponenta programa.
Za usporedbu tu suneki od postojeih primjera:
Servo biblioteka slui za upravljanje R / C servo pogonom, sadri Servo.h i
Servo.cpp datoteke. Servo Hello World je program koji koristi ovu biblioteku za
upravljanje servo pogonom, sadri main.cpp i Servo biblioteku.
Vidjet ete da je servo biblioteka ponovno upotrebljiva komponenta, ukljuujui
API dokumentaciju kako bi se lake koristila. Servo Hello World koristi ovu biblioteku
tako da programeru ostaje samo briga to eli uiniti sa servo pogonom
Pisanje koda za biblioteku
Dobar biblioteka ima jasnu svrhu, lijepo i isto suelje, i ne ukljuuje kd koji slui
za neke druge svrhe - to je ono za to i je korisniki program.
Veina biblioteka zapravo nastaje na bazi nekog koda koji se ve pokazao
korisnim, a zatim bude ponovno optimiran u vidu korisne klase ili skupa funkcija koje
se mogu ponovno upotrijebiti na vie mjesta u programu, te se zatim konano odvoji
tako da ga bilo koji program moe ukljuiti i iskoristi. Pogledajmo kroz primjer u
nastavku kako bi to moglo funkcionirati.
90
flash(5);
// do something else
// flash 2 times
flash(2);
// do another thing
}
Komentar "flash n times" je sada suvian! Izvorni kod govori sam za sebe
Stvorite funkciju kojoj moemo predati informaciju koji ppin treba treperiti
Izabrat emo prvi nain. Moda to za ovaj primjer nije najbolje rjeenje, ali je u
praksi najee.
Stvorit emo klasu i nazvati je Flasher koja, kada je kreirana, postavlja DigitalOut
pin, te osigurava metodu treperenja na tom pinu kao to je prikazano na slici 102:
92
#include "mbed.h"
class Flasher {
public:
Flasher(PinName pin) : _pin(pin) {
// _pin(pin) means pass pin to the DigitalOut constructor
_pin = 0;
// default the output to 0
}
void flash(int n) {
for(int i=0; i<n*2; i++) {
_pin = !_pin;
wait(0.2);
}
}
private:
DigitalOut _pin;
};
Flasher led(LED2);
Flasher out(p6);
int main() {
led.flash(5);
led.flash(2);
out.flash(10);
}
Pomou tog koda moemo stvoriti objekt Flasher povezan na izabrani pin, i
narediti mu da treperi. Naravno da pri tom moemo jednostavno stvoriti razliite
bljeskalice na razliitim izlaznim pinovima.
To jest sve malo kompleksnije, ali vano je naglasiti da taj uloeni dodatni napor
pretvaranja ovog korisnog koda u klasu rezultira jednostavnou njegovog
koritenja u razliitim programima.
93
Zajedno sa trudom koji smo uloili da bi se ovaj kod mogao viekratno koristiti,
vjerojatno bismo htjeli olakati njegovo ukljuivanje u druge programe. Da bismo to
uinili, moemo staviti kod u vlastite datoteke koje jednostavno mogu biti ukljuene
u druge programe.
#ifndef MBED_FLASHER_H
#define MBED_FLASHER_H
#include "mbed.h"
class Flasher {
public:
Flasher(PinName pin);
void flash(int n);
private:
DigitalOut _pin;
};
#endif
#include "Flasher.h"
#include "mbed.h"
Flasher::Flasher(PinName pin) : _pin(pin) {
_pin = 0;
}
void Flasher::flash(int n) {
for(int i=0; i<n*2; i++) {
_pin = !_pin;
wait(0.2);
}
}
94
#include "mbed.h"
#include "Flasher.h"
Flasher led(LED2);
int main() {
led.flash(5);
led.flash(2);
}
95
97
BusOut
BusOut
write
read
operator=
operator int()
#include "mbed.h"
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
int main() {
while(1) {
led1 = 1;
led2 = 0;
led3 = 0;
led4 = 0;
wait(0.25);
led1 = 0;
led2 = 1;
led3 = 0;
led4 = 0;
wait(0.25);
led1 = 0;
led2 = 0;
led3 = 1;
led4 = 0;
wait(0.25);
led1 = 0;
led2 = 0;
led3 = 0;
led4 = 1;
wait(0.25);
}
}
Slika 110: Primjer cpp koda kojim se upravlja sa integriranim diodama
99
13
101
Hardverska integracija
LCD zaslon ima 16 prikljuaka prikazanih u tablici 14.
Tablica 14: Prikljuci LCD zaslona
Prikljuak br.
1
2
3
4
5
6
7
8
9
10
11
12
13
Naziv prikljuka
VSS
VDD
V0
RS
R/W
E
DB0
DB1
DB2
DB3
DB4
DB5
DB6
Funkcija
Napajanje (GND)
Napajanje (5V)
podeenje kontrasta
signal odabira registra
itaj/pii
signal omoguenja
sabirnica podataka bit 0
sabirnica podataka bit 1
sabirnica podataka bit 2
sabirnica podataka bit 3
sabirnica podataka bit 4
sabirnica podataka bit 5
sabirnica podataka bit 6
102
14
15
16
DB7
A
K
LCD
prikljuak
1
2
3
4
5
6
11
12
13
14
15
16
Naziv prikljuka
Napajanje
VSS
VDD
V0
RS
R/W
E
DB4
DB5
DB6
DB7
A
K
0V
5V
cca 1V
0V
5V
0V
103
Openito, LCD se koristi samo u 'write' nainu rada (upis i promjena podataka),
stoga se R/W trajno spaja na masu (MBED pin 1). Na prikljuak 3 LCD-a spaja se
srednji izvod potenciometra (1 K ili 10 K) kojim sa podesi kontrast na displeju.
Kontrast se moe podesiti i postavljanjem otpornikog djelila sa dva vanjska
otpornika (npr 150 i 1 K).
Hardver se postavlja na sljedei nain prikazan na slici 114:
14
Prikljuak - pin
104
TextLCD lcd(int rs, int e, int d0, int d1, int d2, int d3);
15
//rs,e,d0, d1,d2,d3
int main() {
while(1){
percentage=Ain*100;
lcd.printf("%i",percentage);
wait(0.002);
lcd.cls();
}
}
Slika 122: Primjer prikazivanja analognih ulaznih podataka na LCD-u
Dodatni zadatak
Vjeba 8-6: Izrada voltmetra
Kreirajte program koji MBED-u omoguuje funkciju standardnog voltmetra.
Razlika potencijala mjeri se izmeu 0 - 3,3 V i prikazuje se na zaslonu.
107
108
9. Serijska komunikacija sa IC
9.1. Upoznavanje sa IC-om
Naziv IC je skraenica za 'Standard Inter-Integrated Circuit bus' to bi u prijevodu
znailo 'standardni meu-integrirani sabirniki sklop'. IC je serijski podatkovni
protokol koji djeluje na bazi master/slave odnosa. Koristi samo dvije fizike ice, to
znai da se podaci prenose pod kontrolom mastera istovremeno samo u jednom
smjeru. Protokol IC je dvoino serijsko suelje i omoguuje jeftinu i jednostavnu
primjenu u hardveru.
IC komunikacijski signali su serijski podaci (serial data, tj. 'SDA') i serijski sat
(serial clock, tj. 'SCL'). Oba signala omoguavaju serijsku komunikaciju 8-bitnih
podatkovnih bajtova, 7-bitnih adresnih ureaja te kontrolnih bitova.
16
17
110
IC na MBED-u
MBED IC funkcije iz biblioteke prikazane su u tablici:
Tablica 16:Funkcija IC
IC
Funkcija
I2C
frequency
read
read
write
write
start
stop
111
112
SLAVE
TX_1
RX_0
RX_1
0xC0
podatak ->BOut
INT-Temp (0-7)
INT-Temp(8-9)
0xC1
podatak ->BOut
Ain0 (0-7)
Ain0 (8-9)
0xC2
podatak ->BOut
0x23
0x45
NAIN RADA
Temperatura u
0,1 C
A/D (10 bita),
Uref = 1,5V
ispitni mod
Za oitavanje temperature koje mjeri MSP430G treba preuzeti dva bajta podatka
koje alje Slave te zbrojiti nii bajt (RX_0) da viim bajtom kojeg smo prethodno
pomnoili sa 256. Dobiveni cijeli broj daje desetinke stupnjeva Celzijusa. Za prikaz
temperature u C taj broj se treba podijeliti sa 10.
Za oitavanje rezultata A/D pretvorbe 10-bitnog pretvaraa treba uiniti slino
(RX_0+ 256* RX_1). Dobiveni broj u rasponu od 0 do 1023 odnosi se na ugraenu
referencu od 1,5 V.
114
MBED pin
MSP430G pin
Napomena
VCC (3,3V)
40
GND (0V)
20
SDA
15
SCL
10
14
115
//sda, sc1
//tx, rx
// transmitt buffer
// read buffer
wait(0.5);
config_t[0] = 0xC1;
//config slave to int temp
config_t[1] = 0xff;
MSP430G.write(addr1, config_t, 2);
wait_us(20);
MSP430G.read(addr1, temp_read, 2); //read the two-byte temp data
float temp = temp_read[0]+temp_read[1]*256;
pc.printf("Temp = %.1f degC\n\r", temp/10); // print on screen
wait(0.5);
}
}
118
18
119
U sluaju kada postoji vie 'slave' ureaja, 'master' mora davati jedinstveni izlazni
CS signal za svaki 'slave'.
Stoga, kod SPI-a postoje etiri moda, tj. naina rada prama slici 133.
120
121
SPI na MBED-u
MBED SPI funkcije iz biblioteke prikazane su u tablici 19:
Tablica 19: Funkcija SPI
SPI
Funkcija
SPI
format
frequency
write
Napomena: ova tablica je za SPI 'master' biblioteku. Postoji i SPI 'slave' biblioteka
koja se koristi za komunikaciju sa SPI 'master' ureajima. SPI 'slave' biblioteka nije
ohuhvaena u ovom radu.
SPI suelje koristi se na MBED-ovim pinovima p5/p6/p7 i p11/p12/p13.
123
128
}
Slika 144: Primjer cpp koda za vjebu 11-1
}
Slika 145: Primjer cpp koda za vjebu 11-2
DigitalOut led1(LED1);
// digital out to onboard LED1
Timer debounce;
// define debounce timer
LocalFileSystem local("local");
// define local file system
void toggle(void);
// function prototype
int main() {
debounce.start();
// start debounce timer
button.rise(&toggle);
// attach the toggle function to the rising edge
}
void toggle() {
// perform toggle if debounce time has elapsed
if (debounce.read_ms()>200) {
led1=!led1;
// toggle LED
FILE* Logfile = fopen ("/local/log.txt","a");
// open file for appending
fprintf(Logfile,"time=%.3fs: setting led=%d\n\r",debounce.read(),led1.read());
fclose(Logfile);
// close file
debounce.reset();
// reset debounce timer
}
}
Slika 146: Primjer cpp koda za vjebu 11-3
Dodatne vjebe
Vjeba 11-4: Unos teksta u terminal
Kreirajte program koji od korisnika trai unos teksta u aplikaciju terminala. Kada
korisnik pritisne tipku Enter (na tipkovnici), tekst se sprema u datoteku na MBED.
131
Prikljuak
LCD
zaslona,
ime
GND
VDD
Vo
RS
R/W
E
DB4
DB5
DB6
DB7
Prikljuak
LCD
zaslona,
broj
1
2
3
4
5
6
11
12
13
14
MBED
prikljuak,
broj
1
39
Napomena
GND
5V
Potenciometar, OV
Zelena
Naranasta
Smea
Plava
Zelenoplava
Zelena
Naranasta
Zelena
Smea
Plava
Naranasta
Zelenoplava Smea
20
GND
18
13
12
11
10
8
5
6
21
Tipkalo, OV
Zelena LED dioda
Crvena LED dioda
Piezo zvunik
Plava
132
19
lcd.cls();
//brisanje postojeeg sadraja zaslona
wait(1);
lcd.printf("TVZ");
wait(1);
lcd.cls();
lcd.printf("SPEC ELO");
wait(1);
lcd.cls();
lcd.printf("Dipl.");
wait(1);
lcd.cls();
lcd.printf("zadatak");
wait(1);
lcd.cls();
lcd.printf("E334");
wait(1);
lcd.cls();
lcd.printf("**MBED**");
wait(1);
lcd.cls();
134
lcd.printf("Tomislav");
wait(1);
lcd.cls();
lcd.printf("Hadrovic");
wait(1);
lcd.cls();
wait(1);
tipkalo.mode(PullUp);
wait(.001);
while(1) {
if (tipkalo==0){
zelenaled=1;
crvenaled=0;
start=1;
}
if(start==1){
for (int i=0; i<=70; i++) {
buzzer.period(1/(frequency[i]));
buzzer=0.5;
wait(0.5*beat[i]);
}
crvenaled=1;
zelenaled=0;
start=0;
}
}
}
Slika 148: Programski cpp kod za primjer
135
13. Literatura
1. "Embedded Systems Design Course: Applying the mbed microcontroller",
preuzeto 29.04.2014. s http://mbed.org/cookbook/Course-Notes
2. William Hohl: "ARM Assembly Language: Fundamentals and Techniques",
CRC Press, 2009., 371 str.
3. Joseph Yiu: "The Definitive Guide to the ARM Cortex-M3", Newness, 2011.,
384 str.
4. Bruce Eckel; Chuck Allison: "Thinking in C++: Practical Programming",
Prentice Hall, 2004., 806. str
5. Brian W. Kernighan; Dennis M. Ritchie: "C Programming Language",
Prentice Hall, 1988., 285 str.
6. Bert van Dam: "ARM Microcontrollers (part1) - 35 projects for beginners",
Elektor Verlag, 2010., 250 str.
7. Rob Toulson; Tim Wilmshurst: "Fast and Effective Embedded Systems
Design: Applying the ARM mbed", Newness, 2012., 373 str.