You are on page 1of 140

TEHNIKO VELEUILITE U ZAGREBU

Ljubivoj Cvita

Brzi razvoj prototipova na bazi


mikroupravljaa

Skripte, srpanj 2015.

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.

Glavna prednost MBED

mikroupravljake arhitekture, u odnosu na konkurentne mikroupravljae, je


mogunost brzog razvoja i testiranja aplikacija uporabom korisnike podrke na web
stranici koja je iznimno praktina i prua veliku podrku korisniku. Programsko
suelje ne zahtjeva provoenje nikakve instalacije, te omoguuje rad na
najkoritenijim kompjutorskim platformama.
Skripte prate

teoretski i praktino strukturu i funkcioniranje MBED

mikroupravljaa od najjednostavnijih do sloenijih primjera.

Zagreb, 9.srpnja 2014


Ljubivoj Cvita

Sadraj

POPIS VJEBI ......................................................................................................................................... 1


POPIS TABLICA ...................................................................................................................................... 2
POPIS SLIKA ........................................................................................................................................... 4
1.

UVOD ............................................................................................................................................ 8

2.

UVOD U MIKROUPRAVLJAE......................................................................................................... 9
2.1.

SVIJET MIKROUPRAVLJAA ................................................................................................................ 9

2.2.

IZBOR MIKROUPRAVLJAA .............................................................................................................. 12

2.2.1.

Uvod u izbor mikroupravljaa ........................................................................................ 12

2.2.2.

Proces izbora mikroupravljaa ....................................................................................... 13

2.2.3.

Kriteriji izbora mikroupravljaa ...................................................................................... 15

2.2.4.

Zadani zahtjevi sustava .................................................................................................. 16

2.2.5.

Konaan izbor mikroupravljaa ...................................................................................... 16

2.3.

3.

4.

5.

6.

MBED MIKROUPRAVLJAI.............................................................................................................. 17

2.3.1.

Specifinost MBED mikroupravljaa............................................................................... 18

2.3.2.

Funkcioniranje MBED mikroupravljaa .......................................................................... 21

2.3.3.

Hardverske mogunosti modula MBED LPC1768 ........................................................... 26

DIGITALNI ULAZI I IZLAZI ............................................................................................................. 29


3.1.

DIGITALNI IZLAZI MBED-A ............................................................................................................. 29

3.2.

DIGITALNI ULAZI MBED-A ............................................................................................................. 36

ANALOGNI ULAZI I IZLAZI ............................................................................................................ 41


4.1.

POJMOVI ANALOGNO-DIGITALNE PRETVORBE ..................................................................................... 41

4.2.

ANALOGNI ULAZI MBED-A............................................................................................................. 44

4.3.

DIGITALNO-ANALOGNA PRETVORBA ................................................................................................. 48

4.4.

ANALOGNI IZLAZ MBED-A ............................................................................................................. 49

PULSNO-IRINSKA MODULACIJA ................................................................................................. 54


5.1.

POJAM IRINSKO-PULSNE MODULACIJE ............................................................................................. 54

5.2.

PULSNO-IRINSKA MODULACIJA NA MBED-U .................................................................................... 55

TAJMERI I PREKIDI ....................................................................................................................... 63


6.1.

UPRAVLJANJE VREMENOM I DOGAAJIMA U UGRAENIM SUSTAVIMA ..................................................... 63

6.2.

UPORABA MBED 'TICKER' OBJEKTA ................................................................................................. 67

6.3.

HARDVERSKI PREKIDI ..................................................................................................................... 68

7.

DIZAJN MODULA I TEHNIKE PROGRAMIRANJA ........................................................................... 72


7.1.

RAZVOJ NAPREDNIH UGRAENIH SUSTAVA ......................................................................................... 72

7.2.

RAD SA 7-SEGMENTNIM ZASLONIMA ................................................................................................ 73

7.3.

C FUNKCIJE .................................................................................................................................. 78

7.4.

MODULARNO PROGRAMIRANJE ....................................................................................................... 83

7.5.

KREIRANJE BIBLIOTEKA ................................................................................................................... 90

7.6.

KAKO OBJAVITI SVOJU BIBLIOTEKU .................................................................................................... 95

8.

PARALELNI PODACI I KOMUNIKACIJA .......................................................................................... 98


8.1.

UPOTREBA PARALELNIH DIGITALNIH IZLAZA SA BUSOUT OBJEKTOM ........................................................ 98

8.2.

RAD S PARALELNIM LCD ZASLONOM............................................................................................... 102

9.

SERIJSKA KOMUNIKACIJA SA IC ................................................................................................ 109


9.1.

UPOZNAVANJE SA IC-OM ............................................................................................................ 109

9.2.

FUNKCIONIRANJE MSP430G_I2C_SLAVE MODULA ....................................................................... 112

9.3.

POVEZIVANJE VIE UREAJA NA IC SABIRNICU ................................................................................. 117

10.
10.1.
11.

SERIJSKA KOMUNIKACIJA SA SPI-OM .................................................................................... 119


UPOZNAVANJE SA SPI-OM ........................................................................................................... 119
MEMORIJA I UPRAVLJANJE PODACIMA ................................................................................ 123

11.1.

TIPOVI ELEKTRONIKE MEMORIJE ................................................................................................... 123

11.2.

UPOTREBA PODATKOVNIH DATOTEKA NA MBED-U ........................................................................... 125

12.

UPOTREBA MBED MIKROUPRAVLJAA U PRAKSI ................................................................. 132

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

Tablica 20: Biblioteka 'stdio.h' ................................................................................................................ 126


Tablica 21: Spajanje prikljuaka kojim je ostvaren primjer...................................................................... 132

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

Slika 37: Analogno-digitalna pretvorba ..................................................................................................... 42


Slika 38: Stepeniasti valni oblik ............................................................................................................... 42
Slika 39: Digitalno uzorkovanje analognog signala .................................................................................... 43
Slika 40: Analogni ulazi MBED-a ................................................................................................................ 44
Slika 41: Spajanje potenciometra na MBED .............................................................................................. 45
Slika 42: Primjer cpp koda za uporabu potenciometra .............................................................................. 45
Slika 43 Tera Term izbor komunikacijskog kanala ..................................................................................... 46
Slika 44 Tera term postavke ................................................................................................................... 46
Slika 45 Tera Term - Prikaz vrijednost AIN20 ............................................................................................. 47
Slika 46: Digitalno-analogna pretvorba ..................................................................................................... 48
Slika 47: Analogni izlaz na MBED-u ........................................................................................................... 49
Slika 48: Primjer cpp koda sa upotrebom analognog izlaza ....................................................................... 50
Slika 49 Y-t oscilogram analognog izlaza ................................................................................................... 51
Slika 50: Primjer cpp koda sa signalom pilastog valnog oblika .................................................................. 52
Slika 51 Pilasti valni oblik .......................................................................................................................... 52
Slika 52 Trokutasti valni oblik ................................................................................................................... 53
Slika 53: Aktivni ciklus............................................................................................................................... 54
Slika 54: Niskopropusni filter .................................................................................................................... 55
Slika 55 Induktivno- radni teret ................................................................................................................ 55
Slika 56: Pulsno-irinska modulacija na MBED-u ....................................................................................... 56
Slika 57: Primjer cpp koda za PWM signal ................................................................................................. 57
Slika 58: Vrijednosti aktivnog ciklusa od 20% i 80% .................................................................................. 57
Slika 59: Upravljanje LED osvjetljenjem pomou PWM-a .......................................................................... 58
Slika 60: Upravljanje pozicijom servo motora pomou PWM-a ................................................................. 59
Slika 61: Vanjsko napajanje servo motora ................................................................................................ 59
Slika 62: Spajanje servo motora na MBED ................................................................................................. 60
Slika 63: Note hrvatske himne .................................................................................................................. 61
Slika 64 Piezo zvunik na PWM izlazu ....................................................................................................... 62
Slika 65: Primjer cpp koda za upotrebu piezo zvunika ............................................................................. 62
Slika 66: Jednostavna rutina tajmera ........................................................................................................ 64
Slika 67: Primjer cpp koda koji koristi tajmer ............................................................................................ 65
Slika 68: Primjer cpp koda koji koristi 2 tajmera ....................................................................................... 66
Slika 69: Primjer cpp koda koji koristi dva 'Ticker'-a .................................................................................. 68
Slika 70: Primjer cpp koda za vjebu 6-4 ................................................................................................... 69
Slika 71: Utjecaj titranja na upravljanje prekidima.................................................................................... 70
Slika 72: Primjer cpp koda za vjebu 6-5 ................................................................................................... 70
Slika 73: Pozivanje funkcije iz glavnog programa ...................................................................................... 72
Slika 74: 7-segmentni zaslon ..................................................................................................................... 73
5

Slika 75: Spajanje 7-segmentnog zaslona sa MBED-om ............................................................................. 74


Slika 76: Primjer cpp koda za 7-segmentni zaslon ..................................................................................... 74
Slika 77: Programski cpp kod za vjebu 7-1 ............................................................................................... 76
Slika 78: Programski cpp kod za vjebu 7-2 ............................................................................................... 77
Slika 79: Sintaksa C funkcije ...................................................................................................................... 78
Slika 80: Oblik prototipa funkcije .............................................................................................................. 78
Slika 81: Primjer dizajniranja funkcije ....................................................................................................... 79
Slika 82: Primjer izvravanja C funkcije ..................................................................................................... 79
Slika 83: Dodavanje drugog 7-segmentnog zaslona na MBED ................................................................... 80
Slika 84: Programski cpp kod za vjebu 7-5 ............................................................................................... 80
Slika 85: Definiranje prototipa funkcija ..................................................................................................... 81
Slika 86: Programski cpp kod za vjebu 7-6 ............................................................................................... 82
Slika 87: Funkcije za vjebu 7-6 ................................................................................................................. 82
Slika 88: Modularno programiranje .......................................................................................................... 84
Slika 89: Pozivanje unaprijed zadanih C datoteka zaglavlja ....................................................................... 84
Slika 90: Pozivanje vlastitih datoteka zaglavlja ......................................................................................... 85
Slika 91: Prikaz pozivanja datoteka zaglavlja............................................................................................. 85
Slika 92: Predloak za datoteke zaglavlja .................................................................................................. 86
Slika 93: Vanjsko upravljanje nad izvornom datotekom............................................................................ 86
Slika 94: Dodavanje datoteka u projekt .................................................................................................... 87
Slika 95: Programski cpp kod za vjebu 7-7 ............................................................................................... 87
Slika 96: Datoteka 'SegDisplay.cpp' za vjebu 7-7 ..................................................................................... 88
Slika 97: Datoteka 'SegDisplay.h' za vjebu 7-7 ......................................................................................... 88
Slika 98: Datoteka 'HostIO.cpp' za vjebu 7-7............................................................................................ 89
Slika 99: Datoteka 'HostIO.h' za vjebu 7-7 ............................................................................................... 89
Slika 100: Primjer koda prije poboljanja dizajna ...................................................................................... 91
Slika 101: Primjer koda nakon skraivanja ................................................................................................ 92
Slika 102: Stvaranje klase .......................................................................................................................... 93
Slika 103: Datoteka Flasher.h .................................................................................................................... 94
Slika 104:Datoteka Flasher.cpp ................................................................................................................. 95
Slika 105: Primjer koritenja objekta iz biblioteke .................................................................................... 95
Slika 106: Izgled programa u razvojnom okruenju ................................................................................... 96
Slika 107: Stvaranje nove biblioteke Flasher .......................................................................................... 96
Slika 108: Objavljivanje biblioteke ............................................................................................................ 97
Slika 109: Izmjena na projektu .................................................................................................................. 97
Slika 110: Primjer cpp koda kojim se upravlja sa integriranim diodama .................................................... 99
Slika 111: 'Knightrider' LED efekt upotrebom digitalnih izlaza ................................................................ 100
Slika 112: 'Knightrider' LED efekt upotrebom BusOut objekta ................................................................ 101
6

Slika 113: LCD zaslon 16x2 ...................................................................................................................... 102


Slika 114: Spajanje hardvera LCD zaslona i MBED-a ................................................................................ 104
Slika 115:Definiranje prikljuaka za biblioteku TextLCD .......................................................................... 105
Slika 116: Definiranje hardverskih prikljuaka za vjebu 8-4 ................................................................... 105
Slika 117: Primjer jednostavnijeg koritenja alfanumerikog LCD-a ........................................................ 105
Slika 118: Odabir eljene pozicije na LCD zaslonu.................................................................................... 105
Slika 119: Brisanje postojeeg sadraja LCD zaslona................................................................................ 106
Slika 120: Prikaz cjelobrojne vrijednosti na LCD zaslonu ......................................................................... 106
Slika 121: Prikaz varijabli na LCD-u .......................................................................................................... 106
Slika 122: Primjer prikazivanja analognih ulaznih podataka na LCD-u ..................................................... 107
Slika 123: Shema povezivanja ureaja preko IC sabirnice ...................................................................... 109
Slika 124: Funkcioniranje jednostavne IC komunikacije ......................................................................... 110
Slika 125: Prijenos podataka kod jednostavne IC komunikacije ............................................................. 111
Slika 126: IC prikljuci na MBED-u .......................................................................................................... 112
Slika 127 MSP430G I2C SLAVE ................................................................................................................. 112
Slika 128 Shema modula MSPG_I2C_SLAVE ............................................................................................ 113
Slika 129: Povezivanje MSPG_I2C_SLAVE sa MBED-om ........................................................................... 115
Slika 130: Primjer cpp koda za temperaturni mod MSP430G modula ..................................................... 116
Slika 131 Dva MSPG_I2C_SLAVE na istoj sabirnici ................................................................................... 117
Slika 132 Programski kod uz vjebu 9-3 ................................................................................................... 118
Slika 133: Shema SPI protokola ............................................................................................................... 119
Slika 134: Dijagram funkcioniranja jednostavne SPI komunikacije .......................................................... 120
Slika 135: Modovi rada kod SPI komunikacije ......................................................................................... 121
Slika 136: SPI prikljuci na MBED-u ......................................................................................................... 122
Slika 137: Elektronika memorija ............................................................................................................ 123
Slika 138: Tipovi elektronike memorije ................................................................................................. 124
Slika 139: 'LocalFileSystem' deklaracija ................................................................................................... 126
Slika 140: Naredba 'fopen' za otvaranje datoteka ................................................................................... 127
Slika 141: Naredba 'fclose' za zatvaranje datoteka.................................................................................. 127
Slika 142: Naredba 'fputc' omoguuje pisanje podataka ......................................................................... 127
Slika 143: Naredba 'fgetc' omoguuje itanje podataka ......................................................................... 128
Slika 144: Primjer cpp koda za vjebu 11-1 .............................................................................................. 129
Slika 145: Primjer cpp koda za vjebu 11-2 .............................................................................................. 130
Slika 146: Primjer cpp koda za vjebu 11-3 .............................................................................................. 131
Slika 147: Spajanje hardvera u primjeru.................................................................................................. 133
Slika 148: Programski cpp kod za primjer ................................................................................................ 135

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

Mikroupravlja je cijeli raunalni sustav sadran na jedinstvenom integriranom


sklopu.

Meutim, postoji razlika izmeu mikroprocesora i mikroupravljaa:


Mikroprocesor je 'mozak' raunala, te mu je potrebno dodati druge komponente
(memorija, ulazno/izlazne jedinice itd.) kako bi mogao funkcionirati.

Slika 2: Mikroprocesor

Mikroupravlja je sve u jednom, te mu nisu potrebne dodatne vanjske


komponente. Sve potrebne periferne jedinice nalaze se unutar ureaja.

Slika 3: Mikroupravlja
10

Aktualno, mikroupravljaku tehnologiju najvie koriste i primjenjuju profesionalci


za ugradbene sustave1. Konkretno, mikroupravljai se danas ugrauju u sustave
kao to su automobili, telefoni, aparati i periferija raunalnih sustava.
Dok su neki ugradbeni sustavi vrlo sofisticirani, mnogi pak imaju minimalne
zahtjeve za memoriju, duinu programa, niske su softverske sloenosti te nemaju
operativni sustav. Tipini ulazni i izlazni ureaji dananjih mikroupravljaa su
prekidai, releji, zavojnice, LED diode, LCD zasloni, radijski ureaji, te senzori
podataka za primjerice temperaturu, vlagu i razinu svjetlosti. Ugradbeni sustavi
obino nemaju tipkovnicu, zaslon, diskove, printere, ili druge ulazno/izlazne ureaje
za osobna raunala, te im nije potrebna nikakva ljudska interakcija prilikom rada.
Zbog masovne primjene u raznim podrujima tehnologije mikroupravljai postaju
sve jeftiniji, moniji te interaktivniji.
Upotrebu, razvitak i ope postojanje dananje tehnologije, a time i
mikroupravljaa, meu ostalima, omoguuje i kompanija ARM Holdings (ARM).

Slika 4: Tvrtka ARM Holdings

ARM je vodei svjetski dobavlja poluvodia intelektualnog vlasnitva2, a time


predstavlja i "srce" razvoja digitalnih elektronikih proizvoda. Sjedite ARM-a nalazi
se u Cambrige-u (Velika Britanija), te kompanija zapoljava vie od 2000 ljudi. ARM

Embedded system (eng.) - ugradbeni sustav

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.

2.2. Izbor mikroupravljaa


Odabir odgovarajueg mikroupravljaa za konkretnu aplikaciju je jedna od
kljunih odluka koje utjeu na uspjeh ili neuspjeh projekta. Postoje brojni kriteriji koje
pri tom odabiru treba uzeti u obzir, pa e u nastavku isti biti prezentirani. Pregledno
e biti prikazan proces razmiljanja koji dovodi do pravilnog izbora mikroupravljaa.

2.2.1. Uvod u izbor mikroupravljaa


Osoba ili tim koji obavlja izbor treba se koristiti vlastitom ljestvicom ocjena u
odnosu na prezentirane kriterije za odabir, a zatim dati ukupnu osobnu ocjenu kako
bi se donijela ispravna odluka izbora.

Slika 5: Izbor mikroupravljaa

Glavni cilj u procesu izbora mikroupravljaa je odabrati najjeftiniji mikroupravlja


to minimizira ukupni troak sustava, a pritom jo uvijek ispunjava zadane zahtjeve
na performanse, pouzdanost i zatitu okolia. Ukupni troak sustava ukljuuje sve,
kao to su: inenjering istraivanje i razvoj (R & D), proizvodnja (materijal i rad),
popravke unutar garancije, auriranja na terenu, kompatibilnosti prema postojeim
starijim sustavima, jednostavnost koritenja, i sl.
12

2.2.2. Proces izbora mikroupravljaa


Dizajner se prilikom pokretanja procesa odabira mikroupravljaa mora upitati:
"Koja je funkcija mikroupravljaa u mom sustavu?". Odgovor na ovo jednostavno
pitanje diktira potrebne znaajke mikroupravljaa, a prema tome je i kontrolna toka
u procesu odabira. Provoenje potrage za mikroupravljaima koji ispunjavaju
zadane zahtjeve sustava zapoinje pretraivanjem literature (katalozi, tehniki
podaci, tehniki i struni asopisi), a zatim ukljuuje i direktne konzultacije. U
posljednje vrijeme, struni asopisi i posebice www izdanja su izvor "najsvjeijih
podataka iz tog podruja.

Slika 6: Struna literatura

Funkcije sustava mogu se rijeiti sa "single-chip mikroupravljaem, no u obzir


dolazi i upotreba vie mikroupravljaa ako se time tedi na dodatnom sklopovlju,
uzevi u obzir trokove te prostor na tiskanoj ploici. "Single-chip"3 rjeenje je
poeljno sa cjenovnog aspekta, kao i iz razloga pouzdanosti. Naravno, ako postoji
politika tvrtke koja diktira izbor kod jednog proizvoaa mikroupravljaa, to e
znatno suziti pretraivanje.
Posljednji korak prilikom odabira mikroupravljaa sastoji se od vie faza (unutar
kojih se eli iz popisa prihvatljivih mikroupravljaa donijeti jedan, konaan izbor), a
te faze ukljuuje i odreuje:
cijena

Single chip (eng.) - rjeenje sa jednim ipom tj. mikroupravljaem


13

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.

Slika 7: Konaan odabir mikroupravljaa

14

2.2.3. Kriteriji izbora mikroupravljaa


Opi prikaz glavnih kriterija pri odabiru mikroupravljaa naveden je prema
redoslijedu vanosti.
1. Prikladnost za primjenu u sustavu npr. upotreba jednog ili vie
mikroupravljaa?
Broj ulazno/izlaznih prikljuaka?
Potrebna suelja; (npr. serijska komunikacija, RAM, A/D i D/A
pretvarai)?
Brzina sredinjeg procesora?
Cijena?
2. Dostupnost hardvera?
Da li je mikroupravlja dostupan u dovoljnim koliinama?
Da li je u sadanjoj proizvodnji?
Izgledi u budunosti?
3. Dostupnost razvojne podrke?
Asembleri
Prevoditelji (Compilers)
Alati za otkrivanje greaka (Debugging tools)
Internetski forumi i zajednice
Podrka za primjenu
4. Povijest izabranog proizvoaa i bilanca uspjeha
Dokazana sposobnost u dizajnu
Pouzdanost integriranih krugova
Uinkovitost isporuka na vrijeme
Broj godina u poslovanju
Financijsko izvjee
15

2.2.4. Zadani zahtjevi sustava


Primjena analize tehnikog sustava predvienog u projektu odreuje zahtjeve na
mikroupravlja. Ovdje su neka od pitanja koja treba postaviti i na njih odgovoriti.
Npr.
Koji su periferni prikljuci (suelja) potrebni?
Koliki broj bita mikroupravlja treba imati (8, 16, 32...) kako bi se mogao
implementirati algoritam dovoljne izlazne preciznosti?
Da li je moda potrebna floating point jedinica (FPU)?
Da li je jedan napon ili vie njih potrebno za napajanje sustava?
Postoje li estetski preduvjeti, kao to su oblik i / ili boja?
Postoji li utjecaj radnog okruenja, kao to su vojne specifikacije,
temperatura, vlaga, atmosfera (eksplozivne, korozivne, estice, itd.),
tlak / visina?
to je sa autorskim naknadama i podrkom otkrivanja greaka?

2.2.5. Konaan izbor mikroupravljaa


Kao zavrni korak, kao pomo u procesu odabira, moe se izraditi tablica s
popisom svih mikroupravljaa u izboru u jednom stupcu i svih vanih atributa na
drugom stupcu. Tablicu treba popuniti sa podacima iz kataloga proizvoaa kako bi
se omoguila usporedba.
Meu moguim atributima su:
Cijena
RAM, ROM, EPROM, i EEPROM
Tajmeri
A/D i D/A
Serijski portovi i paralelni portovi (I / O kontrolne linije)
Veliina i tip kuita
16

Zahtjevi na napajanje

2.3. MBED mikroupravljai


MBED je razvojno okruenje namijenjeno za brzi razvoj aplikacija na ARM
CORTEX M3 mikroupravljau LPC1768.

Slika 8: MBED LPC1768

MBED mikroupravljai zasnivaju se na 'Rapid Prototyping' tehnologiji.


'Rapid Prototyping' tehnologija pomae industriji kreirati nove proizvode, a
zasniva se na kontroli, komunikaciji, interakciji, te praenju razvojnih ciklusa u
mikroelektronici
'Rapid Prototyping' tehnologija primjenom MBED-a je usmjerena na brzu izradu
prototipa za raznolike korisnike. Koriste se prednosti DIL (dual in-line) pakovanja,
razvijenih API (application programming interface) komponenti, te WEB stranica za
potporu i meusobnu komunikaciju razvojnih inenjera. Pri tom se ulazi i u
neophodne kompromise da bi se omoguilo brzo eksperimentiranje. Konani
rezultat: stvaraju se nove primjene mikroupravljake tehnologije.

17

Slika 9: Tehnologija 'Rapid Prototyping'

2.3.1. Specifinost MBED mikroupravljaa


Glavne znaajke koje MBED ine drugaijim:
USB 'Drag and drop' programsko suelje
Nema potrebe za provoenjem nikakve instalacije; programiranje se
odvija kopiranjem izvrnih datoteka na disk pritiskom jedne tipke. Radi na
Windows, Linux i Mac platformama, te nisu potrebni 'driver'-i. Povezuje se
pomou web stranice

Slika 10: USB programsko suelje

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.

Slika 11: Online prevoditelj

Visoka razina periferne apstraktne biblioteke


Nema specifine potrebe za uenjem jer je aplikacijsko programsko
suelje (API) jasno i razumljivo. Objektno orijentirana hardversko-

Online (eng.) - pristup internet mrei


19

softverska apstrakcija omoguuje eksperimentiranje bez poznatih


mikroupravljakih detalja.

Slika 12: Apstraktna biblioteka

Na slici 13 je shematski prikazan proces rada MBED-a:

20

Slika 13: Proces rada MBED-a

2.3.2. Funkcioniranje MBED mikroupravljaa


Da bi se omoguilo koritenje i programiranje MBED mikroupravljaa, najprije je
potrebno spojiti MBED sa raunalom koristei USB kabel.

Slika 14: Povezivanje MBED mikroupravljaa sa raunalom

21

Raunalo prepoznaje MBED modul kao vanjski ureaj za podatkovnu pohranu,


tj. kao USB disk.

Slika 15: MBED modul prikazan kao USB disk

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.

Slika 16: Web stranica www.mbed.org


22

Glavna prednost MBED arhitekture nad drugim arhitekturama je mogunost


brzog razvoja i provjere koncepta ('proof-of-concept') aplikacija uporabom
korisnike podrke na web stranici www.mbed.org.
Nakon logiranja sa korisnikim imenom dobivenim registriranjem MBED-a,
korisnik ima pristup web sadrajima vezanim za standardnu zvaninu MBED
biblioteku, ali i pristup bibliotekama i programima koje kreiraju drugi korisnici. Web
stranica je praktina i prua veliku podrku korisniku. Na stranici se nalazi forum sa
pitanjima i iskustvima mnotva korisnika diljem svijeta, to uvelike olakava
koritenje i programiranje MBED mikroupravljaa.

Kompajliranje5 tj. prevoenje projekta izvodi se na sljedei nain. Potrebno je


pokrenuti prevoditelj klikom na karticu 'Compiler' koja se nalazi u gornjem desnom
kutu poetne MBED-ove korisnike stranice.

Slika 17: Pokretanje prevoditelja na MBED korisnikoj stranici

U radnom prostoru, potrebno je stvoriti novi projekt ili otvoriti postojei.

Compile (eng.) - kompajliranje ili prevoenje


23

Slika 18: Otvaranje projekta u radnom prostoru

Za 'online' prevoenje programa potrebno je kliknuti na karticu 'Compile'. Ovdje


se provjerava tonost i strukturiranost programskog koda, te se u sluaju detekcije
greke onemoguava izvravanje programa, tj. greka se mora ispraviti.

Slika 19: Online prevoenje programa

Zatim se kreira ".bin" datoteka koja se pohranjuje na raunalo.


Preuzimanje6 i pokretanje MBED projekta na mikroupravljau izvodi se na
sljedei nain. Potrebno je odabrati '.bin' datoteku i pohraniti je na MBED USB disk.
U primjeru je odabrana datoteka 'test2.bin'.

Download (eng.) - preuzimanje


24

Slika 20: Pohrana '.bin' datoteke na MBED USB disk

Prijenos izvrnog koda iz flash memorije MBED modula u memoriju


mikroupravljaa te pokretanje netom prenesenog programa izvrava se pritiskom
na pripadajuu plavu tipku MBED modula, ime je proces rada MBED-a omoguen.

Slika 21: Programiranje MBED-a pritiskom na plavu tipku

25

2.3.3. Hardverske mogunosti modula MBED LPC1768


Mikroupravlja LPC1768 koristi ARM procesor, opiran skup periferije, te USB
programsko i komunikacijsko suelje. Modul MBED sa mikroupravljaem LPC1768
je idealan za eksperimentiranje na maketama, modelima, pogonskim trakama i PCB
ploama. Sastoji se od 40 pinova (tj. prikljunih konektora na razmaku od 2,54 mm)
integriranih na DIP kuitu7. Podrava mnotvo suelja ukljuujui USB, SPI, IC,
CAN, ethernet i serijsko povezivanje. Dimenzije tiskane ploice na kojoj se nalazi
mikroupravlja su 54mm x 26mm.
MBED LPC1768 ima Cortex-M3 hardver koji je najbolji u klasi, te koristi 32-bitni
ARM procesor od 100 Mhz, ima 512 kB programske Flash memorije te 2x32 kB
SRAM memorije. Ethernet povezivanje odvija se brzinama od 10/100 MBit.
Posjeduje RMI suelje, te DMA kontroler. Takoer, ima 8 kanala koji omoguuju 12bitnu analogno-digitalnu pretvorbu; te jedan kanal koji omoguuje 10-bitnu digitalnoanalognu pretvorbu. Posjeduje etiri 32-bitna tajmera.
Ima 6 kanala za pulsno-irinsku modulaciju, 1 kanal za upravljanje motorom
pomou pulsno-irinske modulacije, te ima 8 DMA kanala. Posjeduje USB 2.0
suelje sa integriranim primopredajnikom, te CAN 2.0B sa 2 kanala. Ima 4 UART
kanala, 2 SSP, 1 SPI, 3 IC, te 1 IS. Posjeduje niskoenergetski RTC (real time
clock), te unikatan ID. Ima RC oscilator od 4 MHz.
Moe biti napajan preko USB-a (napon VBUS) ili vanjskog napajanja VIN od 4,5V
do 9V. ak i napajanje do 12V na VIN bi trebalo biti sigurno, no na tim naponima
moe doi do pregrijavanja regulatora ako se koristi regulirani izlaz 3,3V za
napajanje vanjskih komponenti. Na slici 22 prikazana je shema regulatora napona
koji su dio hardverskog sklopa na ploici MBED-a.

Dual in-line package (kratica DIP ili DIL) oblik je pakiranja integriranih krugova za iroku

uporabu, a ini ga pravokutno kuite sa dva reda metalnih noica.


26

Slika 22 Regulatori napona na MBED-u

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.

Slika 23 Prikljuci MBED-a LPC1768

27

Funkcija i mogunosti hardverskih prikljunih signala MBED-a LPC1768


prikazani su u tablici 1:
Tablica 1: Opis prikljunih signala MBED-a LPC1768
Signal

Opis

GND

Uzemljenje

VIN

Napajanje od 4,5V do 9V

VB

Napajanje od 3V za RTC

nR

Glavni reset

p5...p30

Digitalni ulazno-izlazni prikljuci (26)

p5...p7; p11...p13

SPI suelje

p9, p10; p13, p14; p27, p28

Serijsko povezivanje

p9, p10; p27, p28

IC suelje

p15...p20

Analogni ulazi (6)

p18

Analogni izlaz

p21...p26

Izlazi za pulsno-irinsku modulaciju (6)

p29, p30

CAN suelje

D+

Ulazno-izlazna USB podatkovna linija

D-

Ulazno-izlazna USB podatkovna linija

TD+

Izlazna ethernet odailjaka linija, pozitivna

TD-

Izlazna ethernet odailjaka linija,


negativna

RD+

Ulazna ethernet primajua linija, pozitivna

RD-

Ulazna ethernet primajua linija, negativna

IF+

Izlazna primajua linija za Bootloader mod

IF-

Ulazna odailjaka linija za Bootloader mod

VU

Izlazni napon od 5.0V za USB

VOUT

Izlazni napon od 3,3V


28

3. Digitalni ulazi i izlazi


U sljedeim poglavljima biti e detaljno opisana struktura i funkcioniranje MBED
mikroupravljaa od najjednostavnijih do sloenijih primjera.
MBED mikroupravljai koriste naponski raspon od 3,3V, gdje 0V predstavlja
stanje "OFF", a 3,3V predstavlja stanje "ON". Pojmovi koji su koriteni pri opisu
stanja digitalnih ulaza ili izlaza prikazani su na tablici 2:
Tablica 2: Digitalne terminologije

0V

3,3V

Open (otvoren spoj na 3,3V)

Closed (zatvoren spoj na 3,3V)

Off (iskljuen)

On (ukljuen)

Low (nisko stanje)

High (visoko stanje)

Clear (nije postavljen)

Set (postavljen)

logic 0 (logika nula)

logic 1 (logika jedinica)

False (nije)

True (je)

Napomena: termini "logika 0" i "logika 1" jednostavno se nazivaju "0" i "1"

3.1. Digitalni izlazi MBED-a


Na MBED modulu 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 25 prikazane su oznakama LED1, LED2, LED3 i LED4. MBED
takoer posjeduje 26 digitalnih IO prikljuaka (pinovi 5-30) koji mogu biti
konfigurirani kao digitalni ulazi ili digitalni izlazi.

29

Slika 24: Digitalni izlazi MBED-a

MBED biblioteka ima prireene i korisniku dostupne API komponente


(Application Programming Interface). Jedna od njih je i DigitalOut koja kreira C++
klasu nazvanu DigitalOut. Ta klasa ima niz funkcija (lanova klase) koje su
prikazane su u tablici 3:
Tablica 3: Funkcija digitalnog izlaza

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

Digitalni IO prikljuci se konfiguriraju definiranjem na poetku programskog koda


tako da se svakom digitalnom IO pridruuje ime i pripadajui prikljuak (slika 25):
DigitalOut
DigitalOut
DigitalOut
DigitalOut
itd

izlaz1(p5);
izlaz2(p6);
izlaz3(p7);
semafor(LED1); // izlaz na ugraenu svjetleu diodu LED1
Slika 25: Definiranje digitalnog izlaza

30

Suelje DigitalOut koristi se za postavljanje stanja izlaznog prikljuka, a takoer


i za oitavanje trenutnog stanja izlaza. DigitalOut se postavlja u "0" za stanje
iskljuivanja, odnosno u "1" za stanje ukljuivanja
Uporaba LED dioda na MBED prikljucima
Svjetlea dioda LED (eng. light emitting diode) emitira svijetlo odgovarajue boje
kad je u stanju voenja (prvi kvadrant I/U karatteristike prikazan je na slici 26a).
Prag voenja je kad napon na diodi dostigne vrijednost koljena (1,7 2,2V). Struja
diode treba se ograniiti vanjskim otpornikom na vrijednosti tipino izmeu 2 i 20mA.
Na slikama 26b i 26c prikazani su varijante spajanja svjetlee diode sa predotporom
na izlazni pin mikroupravljaa. U sluaju b) izlaz je izvor struje, a u sluaju c) ponor
struje koja tee kroz LED diodu.

Slika 26: Spajanje LED diode


Vjeba 3-1: Spajanje LED dioda na digitalne izlaze.
Potrebno je spojiti MBED na prototipnu ploicu i prikljuiti crvenu LED diodu u
seriji sa otpornikom 499 na prikljuak 5, te zelenu LED diodu u seriji sa otpornikom
499 na prikljuak 6 (slika 27). Vano je upamtiti da se na MBED prikljuuje
pozitivni pol diode odnosno anoda (strana s veom noicom), dok se negativni pol
diode prikljuuje na GND. MBED ima zajedniko uzemljenje (GND) na prikljuku 1.

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

Slika 27: Uporaba LED dioda na MBED prikljucima

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

Nakon unosa cpp koda, program je potrebno prevesti, preuzeti i pokrenuti na


MBED-u. Analizom primjera programa uoavaju se sljedei elementi programskog
jezika C:
naredbom '#include' iz biblioteke je pozvan mbed.h podatak
DigitalOut objekti su definirani imenom i odgovarajuim mbed prikljukom
funkcija glavnog programa nalazi se unutar 'int main {...program...}'
32

beskonana petlja izvrava se 'while(1)' naredbom, tako da program


nesprestano vrti petlju, a LED stalno trepe
digitalni izlazi su kontrolirani postavljanjem njihove vrijednosti u '0' ili '1'
funkcija 'wait()' se koristi za kontrolu vremena
Kontrola funkcionalnosti izvoenja programa:
1) Optika provjera da li se crvena i zelena ledica pale i gase naizmjenino
2) Provjera rada modela sa LED diodama uz pomo osciloskopa (NI myDAQ)
(prema slici 30 prvi kanal spojen je na pin p6, a drugi kanal na p7)

Slika 29 Prikljuak osciloskopa na model


Dobiveni snimak prikazan je slici 30. Po vremenskoj osi postavljeno mjerilo je
50ms po dijelu, a amplituda je 1V po dijelu.

33

Slika 30 Y-t oscilogram izlaza na p5 i p6

Digitalni izlazi prema aktuatorima


Direktni digitalni izlazi sa pinova mikroupravljaa na LED diode u funkciji su
signalizacije stanja. U praksi e biti ee potrebno da digitalni izlaz djeluje prema
nekom od aktuatora (npr. upravljanje motorom, zaklopkom, ventilom, grijaem, itd.)
gdje je za pogon potreban vii stupanj energije, vea izlazna struja ili vei iznos
napona. U takvim sluajevima na izlazne pinove mikroupravljaa spajaju se
pogonski sklopovi koji e omoguiti strujno ili naponsko pojaanje pa po potrebi i
galvansko odvajanje prema izvrnom aktuatorskom elementu.
Na slici 31 a) prikazan je primjer koritenja bipolarnog tranzistora kao sklopke
koja ukljuuje ili iskljuuje struje u krugu kolektor-emiter koje mogu biti i 100 puta
veeg iznosa od onog koje daje digitalni izlaz mikroupravljaa spojem na bazu
tranzistora. Troilo (aktuatorski lan) prikljueno je izmeu napona napajanja Vcc i
kolektora tranzistora. Napon na troilu moe biti vei od napona napajanja
mikroupravljaa (npr. od 5 do 24V tipino, a struje tereta do maks. 200mA).

34

Slika 31 Pojaala digitalnih izlaza


U sluaju da se troilo nalazi spojeno sa jednim prikljukom prema 0V (GND),
moe se koristiti spoj prikazan na slici 31, detalj b). Upotrebom para NPN/PNP
tranzistora dobiveno je jo vee strujno pojaanje, a napon napajanja troila Vdd
tipino je od 12V do 48V, maksimalne struje do cca 1A do 2A. Za preklapanje jo
veih struja (cca 6A -10A) moe se koristiti elektronika sklopka koja na svom
izlaznom dijelu ima unipolarni tranzistor (MOSFET). Na detalju c) slike 31 prikazan
je primjer upravljanja istosmjernim motorom. Tranzistor Q1 je naponski upravljan pa
je zato koriten otpornik od 10K koji gate MOSFET-a pridie na napon Vdd i
ukljuuje MOSFET kad NPN tranzistor ne vodi. Na detalju d) slike 31 prikazan je
primjer prikljuka releja (zapravo uzbude releja) na mikroupravlja. Tranzistorska
sklopka sa NPN tranzistorom ispred uzbude je nuna zbog struje koju pin
mikroupravljaa ne moe direktno dati ili povui. Paralelno sa uzbudom releja
postavlja se zatitna dioda (ako ve nije ugraena u relej) koja spreava pojavu
prenapona na kolektoru tranzistora. Uzbuda releja spaja se sa drugim krajem na
vie napona (tipino 12V do 48V), a radni i mirni kontakti releja mogu ukljuiti ili
iskljuiti troilo ili aktuator vee snage.

35

3.2. Digitalni ulazi MBED-a


Vrijednosti digitalnih ulaza mogu se oitati. MBED posjeduje 26 prikljuaka
(pinovi 5-30) koji se mogu se konfigurirati kao digitalni ulazi (isto kao i digitalni izlazi),
na sljedei nain (slika 32):
DigitalIn ulaz1(p5);
DigitalIn ulaz2(p6);
DigitalIn prekidac(p7);
Slika 32: Definiranje digitalnog ulaza

DigitalIn API komponenta odreuje trenutno logiko stanje odabranog ulaznog


pina, npr. logiki '0' ili logiki '1'. 0V na digitalnom ulaznom prikljuku daje logiku
'0', dok 3,3V daje logiku '1'.
Dostupne funkcije iz biblioteke prikazane su u tablici 4:
Tablica 4: Funkcija digitalnog ulaza

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

Slika 33 Sklopka kao digitalni ulaz

Vjeba 3-2: Spajanje niza od 4 prekidaa na MBED


Blok od 4 prekidaa SW1 do SW4 spaja se izmeu 0V (GND, pin1) i etiri pina
na modulu MBED koje treba definirati kao digitalne ulaze. Koristi se prethodni model
opisan u vjebi 1 sa LED diodama, a prekidae 1,2,3 i 4 se spajaju na pin 7, 8, 9 i
10. U programu se ti ulazi moraju definirati sa objektom DigitalIn, a funkcija mode
tih ulaza treba se postaviti u stanje PullUp kako bi se aktivirao ugraeni otpornik koji
spaja izabrani ulaz na 3,3V.
PC
V3.3

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

Slika 34: Spajanje prekidaa na MBED

37

-Kreirajte novi program za LED projekt sa prekidaem (slika 35)


#include "mbed.h"
DigitalOut redled(p5);
DigitalOut greenled(p6);
DigitalIn sw1(p7);
int main() {
sw1.mode(PullUp);
while(1) {
if (sw1==1) {
greenled = 0;
redled = 1;
wait(0.2);
redled = 0;
wait(0.2);
}
else if (sw1==0) {
redled = 0;
greenled = 1;
wait(0.2);
greenled = 0;
wait(0.2);
}
}
}

// Pull up internal resistor

//green led is off


// flash red led

//red led is off


// flash green led

Slika 35: Uvoenje ulaznog digitalnog prekidaa na MBED

Za umetanje korisnih komentara, koristi se simbol sa dvije kose linije usmjerene


prema naprijed (//), koje kompajler ignorira. Nakon unosa cpp koda, program je
potrebno prevesti, preuzeti i pokrenuti na MBED-u.
Pogledom na programski kod, uoava se da naredba 'if (sw1==1)' omoguuje da
se kod izvrava na dva razliita naina, ovisno o vrijednosti digitalnog ulaza (tj.
poloaju mehanikog prekidaa). Ako je vrijednost prekidaa '1', zelena LED dioda
je postavljena u nulu (off) dok je crvena LED dioda programirana da trepe. Ako je
digitalni ulaz u stanju '0', tada su uloge LED dioda obrnute.

38

Vjeba 3-3: LED projekt sa 4 prekidaa koritenjem API komponente


BusInOut
Digitalni ulazi i izlazi mogu se koritenjem komponente BusInOut grupirati u skup
bitova (rije odgovarajueg broja bitova) neovisno o tome gdje su i u kojem
redoslijedu definirani ulazno-izlazni prikljuci. Pri tom se funkcijom mode moe
zadati da se ukljue PullUp otpornici na tim pinovima. Na slici 37 prikazan se
programski kod koji koristi sva 4 prikljuena prekidaa (varijabla inputSW) te na
temelju stanja ulaza postavlja kombinacije stanja LED dioda. Naredbom
'inputSW.mode(PullUp); ' ukljuuju se interni otpornici prema +3,3V. Stanje ulazne
include "mbed.h"
DigitalOut redled(p5);
DigitalOut greenled(p6);
BusInOut inputSW(p7, p8, p9, p10);
int main() {
inputSW.mode(PullUp);
while(1) {
switch(inputSW) {
case 0x1:
greenled = 1;
redled = 0;
break;
case 0x2:
greenled = 0;
redled = 1;
break;
case 0x4:
case 0x8:
greenled = 1;
redled = 1;
break;
default :
greenled = 0;
redled = 0;
}
}
}

// Pull up internal resistor

//green led is on
//red led is off

//green led is off


//red led is on

//green led is on
//red led is on

//green led is off


//red led is off

varijable testira se naredbom ' switch(inputSW) '.


Slika 36 Programski kod za vjebu 3-3
39

Obzirom na sadraj varijable (u heksadecimalnom obliku) izvrava se jedan od


predvienih sluajeva, npr. ' case 0x1: ' koji pali zelenu LED diodu, a gasi crvenu.
Naredbe tog sluaja izvravaju se sve do komande ' break; ' kada program preskae
na kraj 'switch' naredbe. U svim ostalim nenavedenim sluajevima izvrava se kod
koji slijedi iza naredbe 'default:' u tijelu 'switch' strukture.

Vjeba 3-4: Pulsni valni izlaz


Upotrebom digitalnog ulaznog prekidaa, kreirajte pulsni valni izlaz koji
udvostruuje frekvenciju kada je digitalni ulazni prekida ukljuen.

Vjeba 3-5: Broja do deset


Napravite sustav koji broji koliko puta je digitalni prekida pritisnut (tj. promijenjen
mu je poloaj), a nakon to izbroji 10 puta, pali se LED dioda.

40

Analogni ulazi i izlazi MBED-a

4. Analogni ulazi i izlazi


Mikroupravljai su esto koriteni u suelju s analognim signalima, te stoga
moraju omoguavati pretvorbu ulaznih analognih signala (npr. iz mikrofona ili
temperaturnog senzora) u digitalan oblik signala. Takoer, moraju omoguavati
pretvorbu digitalnih signala u analogni oblik (npr. pokretanje zvunika ili
istosmjernog motora). Za pretvorbu iz analognog oblika signala u digitalni ili obrnuto,
mikroupravljai koriste ili ugraene A/D odnosno D/A pretvornike ili koriste vanjske
pretvornike (koji su u principu uvijek toniji i stabilniji) koji se prikljuuju na
mikroupravlja serijskom (ee) ili paralelnom vezom. Unutarnji A/D ili D/A
pretvornici su jednostavniji za koritenje. Prilikom takvog razmatranja treba uzeti u
obzir da je vrijeme A/D pretvorbe ugraenog pretvornika u MBED-u 40 S.

4.1. Pojmovi analogno-digitalne pretvorbe


Analogno-digitalni pretvornik ili konvertor (ADC) je elektroniki krug iji je digitalni
izlaz proporcionalan njegovom analognom ulazu. Naime, "mjeri" se ulazni napon, a
kao izlaz daje binarni broj proporcionalan veliini ulaznog napona. Ulazni raspon
ADC-a odreen je vrijednou referentnog napona u odnosu na koji se mjereni
napon usporeuje.
Nain odvijanja procesa analogno-digitalne pretvorbe prikazan je na slici 37:

41

Analogni ulazi i izlazi MBED-a

Slika 37: Analogno-digitalna pretvorba

Pretvorba se pokree signalom SC (eng. Start Conversion). Nakon potrebnog


vremena pretvorba je izvrena, to se signalizira linijom za zavretak pretvorbe EOC
(eng. End of Conversion). Stanje linije EOC se ispituje u kratkim vremenskim
razmacima (eng. pooling) ili promjena stanja te linije izazove prekid glavnog
programa te izvrenje prekidne rutine koja oitava rezultat pretvorbe. Rezultat
pretvorbe oitava je omoguenjem izlaza linijom OE (eng. Output Enable).
"Stepeniasti" valni oblik vidljiv u 3-bitnom ADC-u (prema slici 38):

Slika 38: Stepeniasti valni oblik

42

Analogni ulazi i izlazi MBED-a


Rezolucija i uzorkovanje ADC-a:
Pretvorbom analognog signala u digitalni, njegova se vrijednost aproksimira, te
svaka vrijednost digitalnog izlaza predstavlja promjenu ulaznog analognog napona.
Ako se pretvara analogni signal raspona od 0-3,3 V u 8-bitni digitalni signal, onda
postoji 256 (2^8) razliitih izlaznih vrijednosti. Svaki uzorak ima irinu od 3,3/256 =
12.89 mV, a najvea greka pri kvantizaciji moe biti 6,45 mV. MBED ima ugraeni
12-bitni ADC, to ukazuje da ima irinu uzorkovanja od 0,8 mV (3,3/2^12), a najvea
greka pri kvantizaciji moe biti 0,4 mV
Frekvencija uzorkovanja:
Prilikom pretvorbe analognog signala u digitalni, uzastopno se uzima 'uzorak' koji
se kvantizira sa tonou koja je odreena rezolucijom ADC-a, a time to je vei
broj uzoraka uzet, time e digitalni podaci biti toniji.
Uzorci se esto uzimaju po fiksnim razdobljima (npr. svake 2 ms), te su definirani
frekvencijom uzorkovanja (broj uzetih uzoraka u sekundi). Frekvencija uzorkovanja
treba biti izabrana u ovisnosti o brzini promjene podataka koji se uzorkuju. Ako je
uzorak frekvencije prenizak u odnosu na brze promjene analognog signala, mogue
je da konanim digitalnim podacima nedostaju neke promjene signala koji se
uzorkuje. Nyquist-ov kriterij uzorkovanja govori da frekvencija uzorkovanja mora biti
barem dvostruko vea od najvee frekvencije signala koji se uzorkuje.

Slika 39: Digitalno uzorkovanje analognog signala

43

Analogni ulazi i izlazi MBED-a

4.2. Analogni ulazi MBED-a


Na MBED je mogue spojiti 6 analognih ulaza (pinovi 15-20) kao to je prikazano
na slici 40.

Slika 40: Analogni ulazi MBED-a

Dostupne funkcije iz API biblioteke prikazane su u tablici 5:

Tablica 5: Funkcija analognog ulaza

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

Vjeba 4-1: Uitavanje i zapisivanje podataka s analognih ulaza


- Spojite srednji izvod potenciometra na pin 20 MBED-a prema shemi a) na slici
41. Obzirom na poloaj klizaa ulazni napon moe se postaviti u rasponu od 0 do
3,3V.
44

Analogni ulazi i izlazi MBED-a

Slika 41: Spajanje potenciometra na MBED

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

API objekt Serial pc(USBTX, USBRX) omoguuje slanje podataka serijskom


komunikacijom na prikljueno raunalo preko USB prikljuka. Komandom 'pc.printf'
pripremaju se i alju podaci koji se mogu prikazati na ekranu monitora raunala. Na
raunalu se treba pokrenuti aplikacija Tera Term te izabrati na prvom izborniku
serijski kanal gdje se prikljuen MBED (slika 43).
45

Analogni ulazi i izlazi MBED-a

Slika 43 Tera Term izbor komunikacijskog kanala


Prema osnovnim postavkama, serijska komunikacija je asihrona bidirekcionalna
sa brzinom prijenosa od 9600 b/s. Postavke se mogu provjeriti na slici 44.

Slika 44 Tera term postavke


Pokretanjem programa na MBED modulu, u razmacima od cca. 0,5 s prikazuje
se na ekranu niz oitanja vrijednosti napona sa izabranog analognog ulaza (slika
46). Pri tom napon 0V na ulazu daje prikaz broja 0,00000, a napon 3,3V prikazuje
broj 1,000000. Ako se vrijednosti ele prikazati kao napon u voltima treba se
46

Analogni ulazi i izlazi MBED-a


naredba

'pc.printf("%f

\n\r",ADCdata);'

zamjeniti

naredbom

'pc.printf("%f

\n\r",ADCdata*3.3);'

Slika 45 Tera Term - Prikaz vrijednost AIN20

Vjeba 4-2: LED VU metar


Primjenom 4 integrirane LED diode MBED-a, napiite program koji e koristei
ulaz potenciometra (pin 20) kontinuirano kontrolirati koliko je LED dioda ukljueno.
Upotrijebite sljedeu tablicu za definiranje kontrole LED-a:
Tablica 6: Prikaz poloaja potenciometra pomou integriranih LED dioda

47

Analogni ulazi i izlazi MBED-a

4.3. Digitalno-analogna pretvorba


Digitalno-analogni pretvara (DAC) moe se predstaviti kao blok dijagram sa
digitalnim ulazom Dul i analogim izlazom Uiz (slika 46).

Slika 46: Digitalno-analogna pretvorba

Izlazni opseg Urange je razlika izmeu maksimalnog i minimalnog izlaznog


napona.
Urange = Umax - Umin
Izlazni opseg je esto definiran izlaznim naponom napajanim iz DAC-a. Digitalne
kontrolne linije omoguuju mikroupravljau postavljanje i komuniciranje sa DAC-om.
Za svaku digitalnu vrijednost ulaza, postoji odgovarajua analogna izlazna
vrijednost odreena ovim izrazom:
Uiz = Dul/2n * Urange
MBED koristi vlastito napajanje od 3,3 V kao referentni napon. MBED LPC 1768
ima 10-bitni DAC, stoga e u izlaznoj karakteristici DAC-a biti 1024 koraka (2^10).
Dakle, veliina koraka ili rezolucija je 3,3/1024, tj. 3,2 mV po bitu.

48

Analogni ulazi i izlazi MBED-a

4.4. Analogni izlaz MBED-a


MBED ima jedan analogni izlaz (pin 18).

Slika 47: Analogni izlaz na MBED-u

Dostupne funkcije iz biblioteke prikazane su u tablici:


Tablica 7: Funkcija analognog izlaza

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

MBED analogni izlaz (pin 18) se definira na sljedei nain:


'AnalogOut Aout(p18);'
49

Analogni ulazi i izlazi MBED-a


Analogni objekt zauzima decimalni broj izmeu 0,0 i 1,0 koji se prosljeuje na
izlaz (tj. pin 18). Stvarni izlazni napon na pinu 18 je izmeu 0V i 3,3V, a decimalni
broj koji je prosljeen izlazu 'postaje' napon skaliran sa faktorom 3,3.

Vjeba 4-3: Stepeniasti analogni izlazni napon


Izradite program i koristei osciloskop, upoznajte se sa upotrebom analognog
izlaza.
#include "mbed.h"
int main() {
AnalogOut Aout(p18);
while(1) {
Aout=0.25;
wait(0.1);
Aout=0.5;
wait(0.1);
Aout=0.75;
wait(0.1);
}
}

// 0.25*3.3V = 0.825V
// 0.5*3.3V = 1.65V
// 0.75*3.3V = 2.475V

Slika 48: Primjer cpp koda sa upotrebom analognog izlaza

Na slici 49 prikazan je Y-t oscilogam dobiven koritenjem programa iz primjera.

50

Analogni ulazi i izlazi MBED-a

Slika 49 Y-t oscilogram analognog izlaza

51

Analogni ulazi i izlazi MBED-a

Vjeba 4-4: Pilasti izlazni analogni napon


Napravite signal pilastog valnog oblika i snimite ga osciloskopom.
//Sawtooth waveform on DAC output to view on oscilloscope
#include "mbed.h"
AnalogOut Aout(p18);
float i;
int main() {
while(1)
{
for (i=0;i<1;i=i+0.1)
{
Aout=i;
wait(0.001);
}
}
}
Slika 50: Primjer cpp koda sa signalom pilastog valnog oblika

Slika 51 Pilasti valni oblik

Vjeba 4-5: Glatki pilasti izlazni analogni napon


Promijenite kod i kreirajte signal glatkog pilastog valnog oblika, uvoenjem finijih
koraka u petlju.
52

Analogni ulazi i izlazi MBED-a

Vjeba 4-6: Trokutasti izlazni analogni napon


Kreirajte signal glatkog trokutastog valnog oblika uvoenjem druge petlje koja broji
unatrag.

Slika 52 Trokutasti valni oblik

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)

Slika 53: Aktivni ciklus

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

Duty cycle (eng.) - aktivni ciklus ili faktor upravljanja


54

sustavi imaju odgovarajue karakteristike koje, u stvarnosti, djeluju kao


niskopropusni filteri.

Slika 54: Niskopropusni filter

U drugom sluaju PWM signalom moe se upravljati sklopkom koja ukljuuje


struju kroz induktivno-otporni teret (tipino namot motora) kao to je prikazano na
slici 55. Djelovanje induktiviteta je takvo da usrednjava struju Iiz koja tee kroz teret.
VDD

Uul

D
L

Iiz
Slika 55 Induktivno- radni teret

5.2. Pulsno-irinska modulacija na MBED-u


PwmOut suelje se koristi za kontroliranje frekvencije i aktivnog omjera9 (omjer
trajanje pozitivne i negativne amplitude) niza digitalnih impulsa. Na MBED je

Mark-space ratio (eng.) - aktivni omjer


55

mogue spojiti 6 PWM izlaza (pinovi 21-26). Svi PwmOut izlazi dijele isto vrijeme
periode (slika 56).

Slika 56: Pulsno-irinska modulacija na MBED-u

Dostupne funkcije iz biblioteke prikazane su u tablici:


Tablica 8: Funkcija pulsno-irinske modulacije

PwmOut
Funkcije
PwmOut
write
read
period
period_ms
period_us
pulsewidth
pulsewidth_ms
pulsewidth_us
operator=
operator float()

Digitalni izlaz pulsno-irinske modulacije


Koritenje
Stvori objekt PwmOut spojen na definirani pin
Postavi iznos aktivnog omjera (duty cycle), specificiran kao
normalizirani realni broj (0,0 1,0)
Proitaj postavljen iznos aktivnog omjera (duty cycle), izmjeren
kao normalizirani realni broj (0,0 1,0)
Postavi periodu T PWM-a, specificiranu u sekundama (float),
millisekundama (int) ili mikrosekundama (int), a pritom ne
mijenjajui iznos aktivnog omjera
Postavi PWM irinu impulsa t1, specificiranu u sekundama
(float), millisekundama (int) ili mikrosekundama (int), a pritom ne
mijenjajui iznos periode
skraenica za pisanje
skraenica za itanje

56

Vjeba 5-1:Dvostruki PWM izlaz


Kreirajte PWM signal koji se moe vidjeti na osciloskopu. Sljedei cpp kod (slika
57) e generirati puls od 100 Hz sa aktivnim ciklusom od 80% na pinu p21 te 20%
na pinu p22.
#include "mbed.h"
PwmOut PWM1(p21);
PwmOut PWM2(p22);
int main() {
PWM1.period(0.010);
// set PWM period to 10 ms
PWM1=0.8;
// set duty cycle to 80%
PWM2=0.2;
// set duty cycle to 20%
}
Slika 57: Primjer cpp koda za PWM signal

Na slici 58 prikazan je oscilogram PWM signala, na kanalu 1 je izlaz na pinu p21


(80% aktivni ciklus), a na kanalu 2 (na oscilogamu dolje) je izlaz da pina p22,

Slika 58: Vrijednosti aktivnog ciklusa od 20% i 80%

57

Vjeba 5-2: Upravljanje LED osvjetljenjem pomou PWM-a


Navedeni primjer cpp koda na slici 59 koristi signal pulsno-irinske modulacije
za poveavanje i smanjivanje svjetline LED diode spojene na pin 21 preko serijskog
otpornika od 1 Kohm.
// host terminal LED dimmer control
#include "mbed.h"
Serial pc(USBTX, USBRX);
PwmOut PWM1(p21);
float brightness=0.0;

// 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

Program zahtjeva koritenje "host" prikljune aplikacije za komunikaciju sa


vrijednou svjetline LED-a, u ovom primjeru pomou tipaka 'u' i 'd'. Na PC raunalu
potrebno je aktivirati aplikacijju Tera Term (vidi sliku 43).

Upravljanje pozicijom servo motora pomou PWM-a


Servo motor je ureaj koji omoguuje preciznu kontrolu kutnog poloaja, brzine i
ubrzanja. Primjenjuje se primjerice u radijski upravljanim automobilima i
zrakoplovima za pozicioniranje kontrolera upravljaa, dizala i kormila. Slanjem PWM
58

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.

Slika 60: Upravljanje pozicijom servo motora pomou PWM-a

Servo zahtjeva vee struje nego to USB standard omoguuje, stoga je bitno da
je servo napajan koristei vanjsko napajanje od 4 baterije AA (6V).

Slika 61: Vanjsko napajanje servo motora

59

Vjeba 5-3: Upravljanje servo motorom


: Spojite servo motor na MBED kako je naznaeno. Postavite PWM period na 20
ms. Pokuajte niz razliitih aktivnih ciklusa i promatrajte pozicioniranje servo motora

Slika 62: Spajanje servo motora na MBED

Vjeba 5-4: Upravljanje servo pozicije potenciometrom


Skalirajte ulazne vrijednosti tako da ukupan raspon podeavanja potenciometra
omoguuje promjenu ukupnog raspona10 pozicije servo motora

Vjeba 5-5: Proizvodnja piezo zvunog signala


Izlaz PWM-a moe se spojiti na piezo zvunik kako bi se proizveo zvuk. Ako je
aktivni ciklus postavljen na 50%, PWM frekvencija odreuje visinu reproduciranog
zvuka
Spojite piezo zvunik na jedan od PWM izlaza. Postavite aktivni ciklus na 50% i
frekvenciju na 500 Hz. Uvjerite se da PWM-om moe biti stvoren zvuk. Promijenite
frekvenciju PWM izlaza i uoite razliku zvuka prilikom promjena frekvencije.

10

Full range (eng.) - ukupni raspon


60

Vjeba 5-6: Hrvatska himna


Iskoristit emo PWM da bi odsvirali hrvatsku himu. Na slici 64 prikazane su note
hrvatske himne. Svaka nota obiljeena je frekvencijom te trajanjem note.
Frekvencija pojedine note odreuje periodu T PWM signala, a trajanje note je
vrijeme ekanja do idue promjene frekvencije. Piezo zvunik ili zujalo (eng, buzzer)
spojem je na pin 21 prema 0V (GND), prikaz na slici 64.

Slika 63: Note hrvatske himne

61

Slika 64 Piezo zvunik na PWM izlazu

#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

Vjeba 5-7: Sviranje piezo zvunikom


Eksperimentirajte s nekom drugom melodijom koja ima note drugih frekvencija i
drugaije duljine trajanja
62

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

Timer (eng.) - tajmer, broja


63

Za obavljanje 'programiranja prema rasporedu' koristi se MBED Timer objekt.

Tablica 9 MBED Timer objekt


Timer
Funkcije
start
stop
reset
read
read_ms
read_us

Tajmer ope namjene


Koritenje
Pokretanje tajmera
Zaustavljanje tajmera
Postavljanje tajmera u 0
proitaj vrijeme koje je proteklo u s
proitaj vrijeme koje je proteklo u ms
proitaj vrijeme koje je proteklo u us

Vjeba 6-1: Jednostavna rutina tajmera


Kreirajte izlazni kvadratni val (puls) koristei 'programiranje prema rasporedu' i
provjerite tonost mjerenja vremena osciloskopom.

Slika 66: Jednostavna rutina tajmera

64

#include "mbed.h"
Timer timer1;
DigitalOut output1(p5);
void task1(void);

// define timer object


// digital output
// task function prototype

//*** main code


int main() {
timer1.start();
// start timer counting
while(1) {
if (timer1.read_ms()>=200) // read time in ms
{
task1();
// call task function
timer1.reset();
// reset timer
}
}
}
void task1(void){
output1=!output1;
}

// task function
// toggle output

Slika 67: Primjer cpp koda koji koristi tajmer

Koritenje vie tajmera


Uporabom 'programiranja prema rasporedu' esto je potrebno izvriti razliite
dijelove koda razliitom brzinom, tj. tempom. Razmotrimo primjer iz automobilskog
sustava. Svjeice za paljenje na benzinskom motoru, ventili i sustav za ubrizgavanje
goriva moraju biti kontrolirani i izvoeni na velikim brzinama, ak do 1ms ili manje,
s obzirom da se motor vrti do 8000 okretaja u minuti. Sustav praenja razine
spremnika goriva mora prijaviti nisku razinu goriva; u ovom sluaju potrebna brzina
izvoenja je otprilike 1000ms. Nema smisla izvravati oba sustava (sustav za
upravljanje ubrizgavanja i sustav za upravljanje razinom goriva) istom brzinom.
Stoga, koriste se programi za sinkronizaciju kojima se poboljava uinkovitost
sustava.
Vjeba 6-2: Koritenje dva tajmera
: Dodajte drugi tajmer koji radi drugaijom brzinom. Da bi se provjerila tonost
izvravanja oba tajmera, iskoristite LED diodu ili osciloskop na MBED pinovima.

65

Potrebno je definirati drugi tajmer objekt, digitalni izlaz i zadatak funkcije


prototipa.
//*** main code
int main() {
timer1.start();
// start timer1 counting
timer2.start();
// start timer2 counting
while(1) {
if (timer1.read_ms()>=200)
// read time
{
task1();
// call task1 function
timer1.reset();
// reset timer
}
if (timer2.read_ms()>=1000)
// read time
{
task2();
// call task2 function
timer2.reset();
// reset timer
}
}
}
//*** task functions
void task1(void){
output1=!output1;
}
void task2(void){
output2=!output2;
}

// toggle output1

// toggle output2

Slika 68: Primjer cpp koda koji koristi 2 tajmera

Specifinosti tajmerskih prekida


-Koristei 'programiranje prema rasporedu', potrebno je biti oprezan sa koliinom
koda i vremenom koje je potrebno za izvravanje koda, tj. programa. Primjerice, ako
je potrebno zadatak pokrenuti svakih 10 ms; izvravanje tog zadatka mora trajati
manje od 10 ms, jer u protivnom bi se prekorailo vrijeme te sustav vie ne bi bio
sinkroniziran. Koliina koda ujedno odreuje potrebnu brzinu procesora. Ponekad
je potrebno zadacima dodijeliti prioritete; npr. ako imamo dva zadatka za
izvravanje, jedan od 1ms, drugi od 100ms (nakon to proe 100 ms, oba e se
zadatka htjeti pokrenuti u isto vrijeme). To takoer znai da se pauza, ekanje ili
kanjenje (tj. vremensko upravljanje 'glasovanjem' ili 'prozivanjem') ne moe koristiti
u sklopu 'programiranja po rasporedu'.

66

6.2. Uporaba MBED 'Ticker' objekta


'Ticker' suelje se koristi za postavljanje ponavljajuih prekida da uzastopno
pozivaju neku funkciju odreenim taktom. Ranije, prilikom koritenja 'Timer' objekta,
postojao je zahtjev da kod glavnog programa kontinuirano analizira tajmer kako bi
se utvrdilo pravo vrijeme kada specifina funkcija mora biti izvrena. Prednost
'Ticker' objekta je da nije potrebno oitavati vrijeme, tako da se moe izvravati drugi
kod za vrijeme dok je 'Ticker' pokrenut u pozadini i poziva priloenu funkciju po
potrebi. MBED Ticker objekt takoer se koristi za obavljanje 'programiranja prema
rasporedu':

Tablica 10: Funkcija MBED Ticker


Ticker
Funkcija
attach
attach
attach_us
attach_us
detach

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

Vjeba 6-3: Kvadratni izlazni signal uz primjenu 'Ticker'-a


Iskoristite dva 'Ticker'-a za stvaranje kvadratnog izlaznog vala.
Upotrijebite LED diodu ili osciloskop na MBED pinovima da bi se provjerila
ispravnost izvravanja dvaju 'Ticker'-a. Koristite kod prikazan na slici 69.
67

#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);

// the address of the


// function to be attached
// and the interval (sec)

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

6.3. Hardverski prekidi


Mikroupravljai mogu biti podeeni za obavljanje specifinih zadataka u sluaju
vanjskih hardverskih pobuda ili dogaaja. To omoguuje glavnom kodu pokretanje
i obavljanje zadataka, a prilikom pojave nekog fizikog podraaja, program mijenja
uobiajeni slijed i 'skae' na izvravanje odreenih potprograma i funkcija. Prekidi
se koriste kako bi se u procesu izvoenja programa osigurali odgovarajui odzivi za
odravanje sustava. Jedini pravi nedostatak prekidnih sustava je detaljnost i
sloenost programiranja kodnih struktura.

68

Tablica 11: Funkcija 'InterruptIn'

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

Vjeba 6-4: Ispitivanje hardverskog prekida


Koritenjem MBED InterruptIn biblioteke, kreirajte program za ukljuivanje, tj.
paljenje LED diode svaki put kad digitalno tipkalo ulaza doe u visoko stanje, tj. u
'1'.
#include "mbed.h"
InterruptIn button(p18);
DigitalOut led1(p5);

// Interrupt on digital pushbutton input p18


// digital out to p5

void toggle(void);

// function prototype

int main() {
button.rise(&toggle);
}

// attach the address of the toggle


// function to the rising edge

void toggle() {
led1=!led1;
}
Slika 70: Primjer cpp koda za vjebu 6-4

Moda ete primjetiti neke probleme u ovom jednostavnom programu, koji su


oni?

69

Utjecaj titranja na upravljanje prekidima


Vjeba 6-4 ne radi sasvim kako se oekuje; mogue je da tipkalo prestane
reagirati ili se poremeti sinkronizacija sa LED diodom. To se dogaa zbog estog
problema nazivanog 'bouncing', koji predstavlja 'titranje' ili 'poskakivanje' signala
tipkala ili prekidaa. U trenutku kada se tipkalo pritisne, ne dogaa se 'isto', tj.
trenutno prebacivanje iz stanja '0' u '1', ve se javi neko kratkotrajno titranje, kao to
je prikazano na slici 71.

Slika 71: Utjecaj titranja na upravljanje prekidima

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();
}

// Interrupt on digital pushbutton input p18


// digital out to p5
// define debounce timer
// function prototype

// attach the address of the toggle


// function to the rising edge
// only allow toggle if debounce timer
// has passed 200 ms
// restart timer when the toggle is performed

Slika 72: Primjer cpp koda za vjebu 6-5


70

Uklanjanjem neeljenog titranja signala pomou razliitih hardverskih i


softverskih metoda, sustav se ponaa kao da prekida ima idealan odziv. Primjer
klasinog hardverskog 'debounce'-ra su dva unakrsno spojena NI (eng. NAND)
logika sklopa koja ine jednostavan Set-Reset (SR) bistabil. Primjer softverskog
'debounce'-ra je 'samoodravanje' tipkala, tj. ako se ulazni signal tipkala mijenja iz
'0' u '1', a pritom tipkalo ostane pritisnuto, tada se javljaju sekvencijalna ili uzastopna
uitavanja sklopke (stanje '1') koja je potrebno softverski ukloniti kako bi program
uspjeno funkcionirao
Dodatne vjebe
Vjeba 6-6: Kontrola signala tipkala osciloskopom
: Upotrebom osciloskopa, procijenite 'debounce' karakteristiku vaeg tipkala.
Koje je idealno 'debounce' vrijeme za vae tipkalo? Imajte na umu da due
'debounce' vrijeme smanjuje sposobnost brzog prebacivanja. Stoga, u sluaju ako
je potrebno brzo prebacivanje, tada je drugaija vrsta tipkala jedino rjeenje.

Vjeba 6-7: Paralelni rad tajmera i hardveskog prekida


: U programu iskombinirajte tajmer i hardverski prekid, kako bi se prikazalo da
upisani program i fizikom pobudom upravljani program mogu funkcionirati zajedno.
Omoguite treptanje dviju LED dioda razliitim brzinama, te omoguite da
hardverski prekid pokrene zvuni signal na zujalici, u sluaju ako je tipkalo pritisnuto.

71

7. Dizajn modula i tehnike programiranja


7.1. Razvoj naprednih ugraenih sustava
Prilikom rada s velikim i multifunkcionalnim projektima, osobito je vano uzeti u
obzir dizajn i strukturu softvera. Nije mogue isprogramirati sve funkcionalnosti u
jednu petlju. Tehnike koritene u velikim multifunkcionalnim projektima ujedno i
olakavaju pojedincima koji rade na brojnim projektima slinog dizajna i redovito
ponavljaju koritenje koda. Razvoj ugraenih sustava ubuhvaa:
kod koji je itljiv, strukturiran i dokumentiran
kod koji moe biti ispitan u modularnom obliku
alate koji prilikom ponovnog koritenja postojeeg koda skrauju vrijeme
razvoja
mogunost da vie inenjera radi na jednom projektu
mogunost da budue nadogradnje budu izvrene
Postoje mnogobrojne C/C++ programske tehnike koje omoguuju da se projektni
zahtjevi zadovolje, tj. ispune.
Funkcije i potprogrami
Funkcija (ponekad se naziva i potprogram) je dio koda unutar veeg programa,
te obavlja odreeni zadatak i neovisna je o glavnom kodu.

Slika 73: Pozivanje funkcije iz glavnog programa


72

7.2. Rad sa 7-segmentnim zaslonima


7-segmentni zaslon je zapravo skup od 8 LED dioda. Da bi se prikazao odabrani
i eljeni broj, svaki LED prikljuak se povezuje na jedan digitalni izlaz MBED-a. Niih
7 bitova upravlja segmentima displeja, a najvii bit kontrolira stanje LED diode DP
te omoguava koritenje decimalne toke u vie-cifrenom displeju (slika 74).

Slika 74: 7-segmentni zaslon

Ako 7-segmentni zaslon spojimo na MBED kao to je prikazano na slici 68 uz


odgovarajuu kombinaciju izlaznih bitova moemo prikazati na zaslonu brojeve od
0 do 9 te upravljati decimalnom tokom. Na tablici 12 su prikazana stanja izlaza
(bajt sloen od osam bitova digitalnih izlaza) i na taj nain prikazana znamenka.

Tablica 12: Kodiranje izlaznog bajta za pogon 7-segmentnog zaslona


Izlazni bajt
(p12, p11, p10, p9, p8, p7, p6, p5)
00111111
00000110
01011011
01001111
01100110
01101101
01111101
00000111
01111111
01101111

ZNAMENKA

0
1
2
3
4
5
6
7
8
9

73

Slika 75: Spajanje 7-segmentnog zaslona sa MBED-om

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;
}

Slika 76: Primjer cpp koda za 7-segmentni zaslon

Iako prikazani primjer cpp koda djeluje sloen, u izvrnom dijelu to je vrlo
jednostavna operacija, meutim:
74

definiran je velik broj digitalnih izlaza


za prikaz jednog broja (broj 3), svakom digitalnom izlazu je dodijeljena
njegova specifina vrijednost
Ovdje nastaje problem:
to ako jednostavno elimo promijeniti broj?
to ako elimo prikazati broj koji je dobiven kao rezultat kalkulacije ili
izrauna?
to ako nam je potrebno vie znamenaka (decimalni brojevi ili brojevi s
deseticama, stoticama ili tisuicama) ?

75

Vjeba 7-1 Ispitivanje 7-segmentnog zaslona


: Spojite 7-segmentni zaslon na MBED i provjerite dali navedeni primjer cpp koda
kontinuirano broji od 0-9.
// program code for Exercise 19
#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);

// 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);
}
}

// set LEDs '0'


// set LEDs '1'
// set LEDs '2'
// set LEDs '3'
// set LEDs '4'
// set LEDs '5'
// set LEDs '6'
// set LEDs '7'
// set LEDs '8'
// set LEDs '9'

Slika 77: Programski cpp kod za vjebu 7-1

Programski cpp kod moe se pojednostaviti uporabom BusOut objekta. BusOut


objekt omoguuje nizu digitalnih izlaza zajedniko konfiguriranje i upravljanje.
Stoga, moe se definirati BusOut objekt za 7-segmentni zaslon i postaviti bajt ija
e vrijednost odrediti prikaz odabranog broja na zaslonu.

76

Vjeba 7-2: Ponovljeno ispitivanje kao na V7-1


Provjerite da li cpp kod na slici 78 obavlja istu funkciju kao i cpp kod iz prethodne
vjebe.
// program code for Exercise 20
#include "mbed.h"
BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12);
int main() {
while (1) {
Seg1=0x3F;
wait(0.2);
Seg1=0x06;
wait(0.2);
Seg1=0x5B;
wait(0.2);
Seg1=0x4F;
wait(0.2);
Seg1=0x66;
wait(0.2);
Seg1=0x6D;
wait(0.2);
Seg1=0x7D;
wait(0.2);
Seg1=0x07;
wait(0.2);
Seg1=0x7F;
wait(0.2);
Seg1=0x6F;
wait(0.2);
}
}

// 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'

Slika 78: Programski cpp kod za vjebu 7-2

Nedostaci koritenja navedene metode za kodiranje 7-segmentnih zaslona su:


ako postoji potreba dodavanja jo jednog 7-segmentnog zaslona kako bi
se brojalo od 0-99, tada cpp kod postaje iznimno opiran i sloen
ako se ele uvesti male i neznatne promjene izvravanja programa (npr.
prikaz svakog treeg broja ili promjena vremena brojanja), cpp kod je
potrebno uvelike izmijeniti
Zbog navedenog postoji bolji nain za programiranje ove vrste funkcionalnosti
programa -> uporabom funkcija.

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

Kao i varijable, sve funkcije je potrebno deklarirati na samom poetku programa.


Deklaracijske odredbe funkcija se nazivaju 'prototipi'. Ispravan oblik prototipa
funkcije je isti kao i sama funkcija, tj. kako slijedi prema slici 80:

Povratni_tip Ime _funkcije (tip_varijable_1 Ime_varijable_1, tip_varijable_2


Ime_varijable_2,,)
Slika 80: Oblik prototipa funkcije

Vjeba 7-3: Dizajniranje C funkcije


: Koristei 7-segmentni zaslon, dizajnirajte C funkciju koja prepoznaje ulaznu
brojevnu varijablu i vraa 8-bitnu vrijednost.
char SegConvert(char SegValue) {
char SegByte=0x00;
switch (SegValue) {
case 0 : SegByte = 0x3F;break;
case 1 : SegByte = 0x06;break;
case 2 : SegByte = 0x5B;break;
case 3 : SegByte = 0x4F;break;
case 4 : SegByte = 0x66;break;
case 5 : SegByte = 0x6D;break;
case 6 : SegByte = 0x7D;break;
case 7 : SegByte = 0x07;break;
case 8 : SegByte = 0x7F;break;
case 9 : SegByte = 0x6F;break;
}

// 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

Vjeba 7-4: Izvravanje C funkcije


: Provjerite da li cpp kod na slici 82, upotrebom SegConvert funkcije, provodi istu
funkcionalnost kao programi iz vjebe 7-1 i 7-2.
#include "mbed.h"
BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12);
// A,B,C,D,E,F,G,DP
char SegConvert(char SegValue);
// function prototype
int main() {
while (1) {
for (char i=0;i<10;i++) {
Seg1=SegConvert(i);
wait(0.2);
}
}
}
char SegConvert(char SegValue) {
char SegByte=0x00;
switch (SegValue) {
case 0 : SegByte = 0x3F;break;
case 1 : SegByte = 0x06;break;
case 2 : SegByte = 0x5B;break;
case 3 : SegByte = 0x4F;break;
case 4 : SegByte = 0x66;break;
case 5 : SegByte = 0x6D;break;
case 6 : SegByte = 0x7D;break;
case 7 : SegByte = 0x07;break;
case 8 : SegByte = 0x7F;break;
case 9 : SegByte = 0x6F;break;
}
return SegByte;
}

// 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

Slika 82: Primjer izvravanja C funkcije

Vjeba 7-5: Ponovna upotreba funkcija i promjena cpp koda

79

: Dodajte drugi 7-segmentni zaslon na prikljuke MBED-a p13-p20. Sada se


moe aurirati kod glavnog programa i pozvati SegConvert funkciju po drugi put,
kako bi se implementirao broja koji broji od 0-99.

Slika 83: Dodavanje drugog 7-segmentnog zaslona na MBED


// main program code for Exercise 7-5
#include "mbed.h"
BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12);
BusOut Seg2(p13,p14,p15,p16,p17,p18,p19,p20);
char SegConvert(char SegValue);
int main() {
while (1) {
for (char j=0;j<10;j++) {
Seg2=SegConvert(j);
for (char i=0;i<10;i++) {
Seg1=SegConvert(i);
wait(0.2);
}
}
}
}

// A,B,C,D,E,F,G,DP
// function prototype
// main program
// infinite loop
// counter loop 1
// tens column
// counter loop 2
// units column

// SegConvert function here...


Slika 84: Programski cpp kod za vjebu 7-5

Glavne znaajke C funkcija


Funkcije se na jednostavan nain mogu ponovno upotrebljavati, to znai da
inenjeri ne moraju ponovno pisati cpp kod svaki put kada se pokree novi projekt.

80

U svakom programu postoji main() funkcija, kojom se definira kod glavnog


programa
Funkcije se mogu koristiti za:
obraivanje i upravljanje podacima

(mogu

se

unijeti

vrijednosti

podataka u funkciju, koja vraa upravljane podatke natrag u glavni


program. Npr., kodiranje matematikih algoritama, pregled tablica i
podatkovnih pretvorbi, kao i upravljake znaajke kojima je mogue
upravljanje na nekoliko razliitih i paralelnih tokova podataka)
dizajniranje i osmiljavanje uinkovitog i lako upravljivog cpp koda
omoguavanje da vie razvojnih inenjera razvijaju softverske znaajke
samostalno i neovisno o drugima, pa je time omogueno provoenje
modularnog kodiranja u praksi.

Izrada sloenih MBED projekata sa funkcijama


Prije rasprave o modularnom kodiranju, bit e dizajniran napredni MBED projekt
koji koristi niz funkcija.

Vjeba 7-6: Modularni MBED projekt


Napiite program koji ita dvoznamenkasti broj uneen na tipkovnici i ispisuje taj
broj na 7-segmentnom zaslonu.
etiri prototipa funkcija su deklarirana prije funkcije glavnog programa:
void SegInit(void);
void HostInit(void);
char GetKeyInput(void);
terminal
char SegConvert(char SegValue);
byte

// function to initialise 7-seg displays


// function to initialise the host terminal
// function to get a keyboard input from the
// function to convert a number to a 7-segment

Slika 85: Definiranje prototipa funkcija

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

// main program code for Exercise 7-6


#include "mbed.h"
Serial pc(USBTX, USBRX);
// comms to host PC
BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12);
// A,B,C,D,E,F,G,DP
BusOut Seg2(p13,p14,p15,p16,p17,p18,p19,p20); // A,B,C,D,E,F,G,DP
void SegInit(void);
void HostInit(void);
char GetKeyInput(void);
char SegConvert(char SegValue);

// function prototype
// function prototype
// function prototype
// function prototype

char data1, data2;

// 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

Sljedee funkcije se dodaju nakon koda glavnog programa:


// functions for Exercise 7-6
void SegInit(void) {
Seg1=SegConvert(0);
Seg2=SegConvert(0);
}

// 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);
}

// get keyboard data (note num. ascii range 0x30-0x39)


// print ascii value to host PC terminal
// return value as non-ascii (bitmask c with value 0x0F)

// copy SegConvert function here too...


Slika 87: Funkcije za vjebu 7-6

Takoer je potrebno kopirati kod za SegConvert funkciju.


82

7.4. Modularno programiranje


Velike projekte u C i C++ potrebno je podijeliti na nekoliko razliitih datoteka jer
tako se uvelike poboljava itljivost i odravanje. Kod za ugraeni sustav moe imati
jednu C datoteku za kontrolu prikljuene periferije, a uz to jo jednu datoteku za
kontrolu korisnikog unosa, te nema smisla kombinirati znaajke ova dva koda u
istu izvornu datoteku. Ako se dio periferije aurira, samo je njegov dio koda potrebno
promijeniti, dok ostale datoteke nije potrebno mijenjati
Modularno kodiranje koristi datoteke zaglavlja za pridruivanje viestrukih
datoteka zajedno. Datoteka 'main.cpp' koristi se za poziv i uporabu funkcija, koje su
definirane u specifinim .cpp datotekama. Svaka .cpp datoteka treba imati
pridruenu deklaracijsku datoteku, koja se naziva 'datoteka zaglavlja'. Datoteke
zaglavlja imaju .h ekstenziju i obino sadravaju samo deklaracije, tj. direktive
kompajlera, promjenjive deklaracije i funkcijske prototipe. Unutar C-a postoje
mnogobrojne datoteke zaglavlja koje se koriste za rukovanje i aritmetiku podatcima,
npr. 'math.h' se koristi za jednostavnije obavljanje trigonometrijskih funkcija. Za
potpuno razumijevanje pristupa modularnom kodiranju, potrebno je razumijeti nain
na koji su programi prethodno obraivani, sastavljeni i povezani, kako bi potom bila
konstruirana binarna izvrna datoteka za mikroupravlja.

83

Slika 88: Modularno programiranje

Najprije predprocesor gleda pojedine izvorne (.cpp) datoteke, te implementira i


poziva sve predprocesorske direktive i pridruene datoteke zaglavlja (.h).
Predprocesorske direktive oznaene su simbolom '#'.
Kompajler stvara objektnu datoteku za pojedini izvorni kod. Zatim se objektne
datoteke i datoteke iz biblioteke povezuju zajedno kako bi se generirala izvrna
binarna datoteka (.bin).
Direktiva #include esto se koristi za poziv pretprocesora, kojim se ukljuuje svaki
kod ili izjava sadrana unutar vanjske datoteke zaglavlja. Prilikom poziva unaprijed
zadanih C datoteka zaglavlja, potrebno je staviti naziv datoteke u <>, primjerice kao
na slici 89:
#include <string.h>
Slika 89: Pozivanje unaprijed zadanih C datoteka zaglavlja
84

Prilkom pozivanja naih vlastitih datoteka zaglavlja, potrebno je staviti naziv


datoteka u navodnike, primjerice kao na slici 90:
#include "myfile.h"
Slika 90: Pozivanje vlastitih datoteka zaglavlja

Vano je napomenuti da #include djeluje na nain 'izrei i zalijepi'. Ako su pozvani


"afile.h" i "bfile.h", a obje datoteke u sebi ukljuuju "cfile.h", postojat e dvije kopije
sadraja datoteke "cfile.h". Kompajler e, stoga, vidjeti sluajeve viestrukih
deklaracija foobar-a i javit e greku.

Slika 91: Prikaz pozivanja datoteka zaglavlja

Upotreba datoteka zaglavlja12


Pretprocesorska direktiva #ifndef koristi se kako bi se osiguralo da je kod
zaglavlja samo jednom pozvan povezivaem. #ifndef doslovno znai 'if not defined',
a u prijevodu 'ako nije definirano'. Pretprocesorske varijable mogu se definirati
(upotrebom #define) na poetku datoteke zaglavlja, te se zatim samo poziva kod
zaglavlja ako varijabla nije prethodno definirana. Ovim nainom kd zaglavlja je
pozvan samo jednom za povezivanje. Stoga se za vjebu preporua koritenje
predloka za datoteke zaglavlja prikazanog na slici 92.

12

Header file (eng.) - datoteka zaglavlja


85

// template for .h file


#ifndef VARIABLENAME_H // if VARIABLENAME_H has not previously been defined
#define VARIABLENAME_H
// define it now
// header declarations here
#endif

// end of the if directive

Slika 92: Predloak za datoteke zaglavlja

Datoteke zaglavlja obino sadre #include naredbe kojima se poziva i upravlja


ugraenim C bibliotekama, odnosno funkcijskim bibliotekama. Takoer, sadre i
funkcijske prototipe. Osim toga, potrebno je ukljuiti pojedinosti svih MBED objekata
koje su potrebne za vanjsko upravljanje, tj. rukovanje nad izvornom datotekom.
Datoteka nazvana 'functions.cpp' moe definirati i koristiti digitalni izlazni objekt
nazvan 'RedLed'. Ako elimo da neke druge izvorne datoteke manipuliraju sa
'RedLed'-om, potrebno je takoer definirati objekt u datoteci zaglavlja koristei
vanjski ili eksterni nain, kako je prikazano na slici 93.
// functions.h file
#ifndef FUNCTIONS_H
defined
#define FUNCTIONS_H

// if FUNCTIONS_H has not previously been


// define it now

extern DigitalOut RedLed;


// external object RedLed is defined in
functions.cpp
// other header declarations here
#endif
// end of the if directive
Slika 93: Vanjsko upravljanje nad izvornom datotekom

Vano je spomenuti, ovdje nije potrebno definirati specifine MBED prikljuke, jer
oni su ve specificirani u objektnoj deklaraciji u 'functions.cpp'

Vjeba 7-7: Projekt sa vie izvornih datoteka


Napravite isti projekt kao u vjebi 7-6 (program uitava dvoznamenkasti broj
uneen na tipkovnici, te ga ispisuje na 7-segmentnom zaslonu) upotrebom
modularne tehnike kodiranja, tj. sa vie izvornih datoteka.
Potrebne su sljedee datoteke: main.cpp - sadri funkciju glavnog programa;
hostIO.cpp - sadri funkcije i objekte za upravljanje host terminalom;
SegDisplay.cpp - sadri funkcije i objekte za izlaz 7-segmentnog zaslona.
86

Potrebne su i sljedee datoteke zaglavlja: HostIO.h, SegDisplay.h, a prema


dogovoru, datoteci 'main.cpp' nije potrebna datoteka zaglavlja. U projekt je potrebno
dodati nove datoteke (slika 94).

Slika 94: Dodavanje datoteka u projekt


Datoteka 'main.cpp' zadrava isti glavni funkcijski kod kao i prije, ali poziva
(#include) ukljuene nove datoteka zaglavlja.
// main.cpp file for Exercise 7-7
#include "mbed.h"
#include "HostIO.h"
#include "SegDisplay.h"
char data1, data2;

// 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

Slika 95: Programski cpp kod za vjebu 7-7


87

Funkcije SegInit i SegConvert su dio datoteke 'SegDisplay.cpp', kao to su i


BusOut objekti pod nazivom 'Seg1' i 'Seg2'. Datoteka 'SegDisplay.cpp' stoga treba
biti kako slijedi:
// SegDisplay.cpp file for Exercise 7-7
#include "SegDisplay.h"
BusOut Seg1(p5,p6,p7,p8,p9,p10,p11,p12);
// A,B,C,D,E,F,G,DP
BusOut Seg2(p13,p14,p15,p16,p17,p18,p19,p20); // A,B,C,D,E,F,G,DP
void SegInit(void) {
Seg1=SegConvert(0);
Seg2=SegConvert(0);
}

// initialise to zero
// initialise to zero

char SegConvert(char SegValue) {


// function 'SegConvert'
char SegByte=0x00;
switch (SegValue) {
//DP G F E D C B A
case 0 : SegByte = 0x3F; break;
// 0 0 1 1 1 1 1 1 binary
case 1 : SegByte = 0x06; break;
// 0 0 0 0 0 1 1 0 binary
case 2 : SegByte = 0x5B; break;
// 0 1 0 1 1 0 1 1 binary
case 3 : SegByte = 0x4F; break;
// 0 1 0 0 1 1 1 1 binary
case 4 : SegByte = 0x66; break;
// 0 1 1 0 0 1 1 0 binary
case 5 : SegByte = 0x6D; break;
// 0 1 1 0 1 1 0 1 binary
case 6 : SegByte = 0x7D; break;
// 0 1 1 1 1 1 0 1 binary
case 7 : SegByte = 0x07; break;
// 0 0 0 0 0 1 1 1 binary
case 8 : SegByte = 0x7F; break;
// 0 1 1 1 1 1 1 1 binary
case 9 : SegByte = 0x6F; break;
// 0 1 1 0 1 1 1 1 binary
}
return SegByte;
}
Slika 96: Datoteka 'SegDisplay.cpp' za vjebu 7-7

Datoteci 'SegDisplay.cpp' je potrebno pozvati datoteku zaglavlja 'SegDisplay.h'.


Datoteka 'SegDisplay.h' treba biti kako slijedi:
// SegDisplay.h file for Exercise 24
#ifndef SEGDISPLAY_H
#define SEGDISPLAY_H
#include "mbed.h"
extern BusOut Seg1;
extern BusOut Seg2;

// allow Seg1 to be manipulated by other files


// allow Seg2 to be manipulated by other files

void SegInit(void);
char SegConvert(char SegValue);

// function prototype
// function prototype

#endif
Slika 97: Datoteka 'SegDisplay.h' za vjebu 7-7
88

Funkcije DisplaySet i GetKeyInput su dio datoteke 'HostIO.cpp', kao to je i objekt


serijskog USB suelja pod nazivom 'pc'.
Datoteka 'HostIO.cpp' stoga treba biti kako slijedi:
// HostIO.cpp code for Exercise 7-7
#include "HostIO.h"
#include "SegDisplay.h"
SegDisplay.cpp

// allow access to functions and objects in

Serial pc(USBTX, USBRX);

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

Slika 98: Datoteka 'HostIO.cpp' za vjebu 7-7

Datoteci 'HostIO.cpp' je potrebno pozvati datoteke zaglavlja 'HostIO.h' i


'SegDisplay.h'. Datoteka 'HostIO.h' treba biti kako slijedi:
// HostIO.h file for Exercise 7-7
#ifndef HOSTIO_H
#define HOSTIO_H
#include "mbed.h"
extern Serial pc;

// allow pc to be manipulated by other files

void HostInit(void);
char GetKeyInput(void);

// function prototype
// function prototype

#endif
Slika 99: Datoteka 'HostIO.h' za vjebu 7-7

Vjeba 7-8: Modularni projekt Servo


Kreirajte modularni projekt koji koristi host prikljunu aplikaciju i servo
motor.Korisnik odabire ulaznu vrijednost izmeu 1-9 koja pomie servo motor u
odreenu poziciju. Ulaz '1' pomie servo motor ulijevo za 90 stupnjeva. Ulaz '9'
89

pomie servo motor udesno za 90 stupnjeva. Brojevi izmeu 1 i 9 pomiu servo


motor u relativni poloaj. Ulaz '5' pomie servo motor u centar, tj. u sredinu. Moe
se iskoristiti funkcija GetKeyInput iz prethodne vjebe. Potrebno je kreirati 'look up'
tablinu funkciju koja pretvara ulaznu vrijednost u razumnu vrijednost PWM aktivnog
ciklusa povezanu sa eljenim servo poloajem.

7.5. Kreiranje biblioteka


Biblioteka je skup izvornog koda, obino namjenjena za koritenje specifine
kompenente, sklopovske periferije ili funkcionalnosti.
Glavna ideja biblioteke je da se izradi i spakuje neto

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

Korak 1 Refactoring (poboljanje dizajna postojeeg koda)


Za poetak, na slici 100 je prikazan primjer koda koji se dobio nakon uspjenog
programiranja:
#include "mbed.h"
DigitalOut pin(LED2);
int main() {
// do something...
// flash 5 times
for(int i=0; i<10; i++) {
pin = !pin;
wait(0.2);
}
// do something else
// flash 2 times
for(int i=0; i<4; i++) {
pin = !pin;
wait(0.2);
}
// do another thing
}

Slika 100: Primjer koda prije poboljanja dizajna


Program moe raditi to to smo htjeli, ali oito je da neki dijelovi koda rade sline
stvari, moda kao rezultat copy-paste prijenosa bitova to smo smatrali korisnim.
Tako na kod moe postati krai kao na slici 101:
#include "mbed.h"
DigitalOut pin(LED2);
void flash(int n) {
for(int i=0; i<n*2; i++) {
pin = !pin;
wait(0.2);
}
}
int main() {
// do something...
// flash 5 times
91

flash(5);
// do something else
// flash 2 times
flash(2);
// do another thing
}

Slika 101: Primjer koda nakon skraivanja

Na prikazan nain nismo promjenili funkcionalnost, meutim sam kod je sada


bolje strukturiran. Kratki pregled nekih prednosti:

U sluaju da u logici treperenja postoji greka, ili je elimo promijeniti, to


se sad popravlja na jednom mjestu

Komentar "flash n times" je sada suvian! Izvorni kod govori sam za sebe

Korak 2 Stvaranje klase


U primjeru kojeg koristimo, iako je logika treperenja stavljena u jednu funkciju, ali
ono to treperi (globalni pin) je fiksan. Mogli bi smatrati da bi bilo korisno da stvorimo
mogunost treperenja na bilo kojem digitalnom izlazu.
Postoji nekoliko naina na koje to moemo uiniti:

Kreirajte klasu za funkcionalnost, koja sadri jedan vlastiti objekt


DigitalOut, tako da moemo stvoriti viekratne verzije na razliitim
pinovima

Stvorite funkciju kojoj moemo predati informaciju koji ppin treba treperiti

Stvorite novu klasu, nasljednika od klase DigitalOut, kojoj treba dodati


funkcionalnost treperenja

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);
}

Slika 102: Stvaranje klase

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.

Korak 3 Odvajanje koda u datoteke

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.

U C jeziku moemo to uiniti stvaranjem datoteka zaglavlja koje se mogu ukljuiti


od strane drugog koda, tako da znamo to je raspoloivo (deklaracije) te izvorne
datoteke koje sadre implementaciju koja generira kod (definicije).
Uobiajeno je da ako imamo klasu Flasher, tada emo stvoriti zaglavnu i izvornu
datoteku istog naziva; Flasher.h i Flasher.cpp (slike 103 i 104).

#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

Slika 103: Datoteka Flasher.h

#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

Slika 104:Datoteka Flasher.cpp


Osnovno znanje o C/C++ jeziku te pre-procesoru biti e potrebno da bi znali to
se dogaa u nastavku.

Koritenje do sada naposanog koda zahtjeva da ga

ukljuimo sa oznakom #include .. na poetku programa koji ga treba koristiti.


Rezultirajui program, main.cpp datoteka prikazana je na slici 105:

#include "mbed.h"
#include "Flasher.h"
Flasher led(LED2);
int main() {
led.flash(5);
led.flash(2);
}

Slika 105: Primjer koritenja objekta iz biblioteke


Na program koristi novo stvorenu funkcionalnost, bez potrebe da znamo kako
je ona kodirana.

7.6. Kako objaviti svoju biblioteku


Sada kada ste napisali neki dobar i funkcionakni kod, postavlja se pitanje kako
omoguiti i drugima da ga koriste? MBED prevoditelj je izgraen tako da ima
ugraenu podrku za biblioteke i omoguava da zapakirate svoj kod i objavite ga
za sveopu upotrebu.
Iz prije pokazanog postupka dobili smo program koji moe biti kao to je prikazan
na slici 106:

95

Slika 106: Izgled programa u razvojnom okruenju


Using the same convention that a class called Flasher should have a header file
Flasher.h, we suggest you make your library have the same name i.e. "Flasher".

Primjenjujui istu konvenciju po kojoj klasa nazvana Flasher treba imati


zaglavnu datoteku Flasher.h, predlaemo da napravite biblioteku sa istim imenom,
tj. Flasher.
Da biste stvorili biblioteku, desnim klikom na svom programu, odaberite "New
Library ..." i upiite "Flasher"; to e dodati mapu u vaem programu, a vi ete
primijetiti simbol kotaia na mapi to znai da je to zapravo biblioteka u nainu
ureivanja. Sada moete na mapu povui datoteke koje e biti dio biblioteke, pa
ete dobiti prikaz na slici 107:

Slika 107: Stvaranje nove biblioteke Flasher


Sljedei korak je objava biblioteke. Da biste to uinili jednostavno desnim klikom
oznaite biblioteku te izaberite "Publish Library...". Trait e vas se da unesete opis,
96

pojedine oznake i odreenu poruku koja je specifina za tu verziju biblioteke ( npr.


prva verzija, ispravljene greke). Nakon unosa pritisnite OK pa ete dobiti poruku
kao na slici 108:

Slika 108: Objavljivanje biblioteke


Vaa biblioteka je sada iva! Moete ii na URL i vidjeti na web stranici
mbed.org, informirati svoje kolege! Takoer ete vidjeti da je va projekt auriran:

Slika 109: Izmjena na projektu

97

8. Paralelni podaci i komunikacija


8.1. Upotreba paralelnih digitalnih izlaza sa BusOut
objektom
Digitalna sabirnica je sustav za prijenos podataka izmeu komponenti, ili izmeu
kontrolera. Sabirnice mogu biti:
paralelne (prenose podatke brojnim icama) - PCI, paralelni ATA i
PCMCIA
serijske (prenose podatke redom na jednoj ici) - Ethernet, FireWire, USB,
IC, SPI i drugi
BusOut suelje se koristi za stvaranje niza paralelnih DigitalOut prikljuaka koji
moe biti izraen kao jedna numerika vrijednost. BusOut suelje koristi se za
postavljanje stanja izlaznih pinova, a takoer i za oitavanje trenutnog izlaznog
stanja. Na MBED-u, etiri (4) integrirane LED diode koriste se za kreiranje BusOut
suelja, te su posebno konfigurirane za rad bez potrebe za dodatnim icama ili
spojevima. MBED takoer posjeduje 26 digitalnih IO prikljuaka (pinovi 5-30) koji
mogu biti konfigurirani kao digitalna sabirnica za koritenje sa BusOut i BusIn
sueljima. BusOut funkcije iz biblioteke prikazane su u tablici 10:
Tablica 13: Funkcija digitalne izlazne sabirnice

BusOut

Digitalna izlazna sabirnica

BusOut
write
read
operator=
operator int()

stvori objekt BusOut povezan sa definiranim izlaznim pinovima


postavi vrijednost na izlaz sabirnice
ita postavljeni izlaz na sabirnici
skraenica za pisanje
skraenica za itanje

Digitalni izlazi mogu se koristiti za promjenu stanja integriranih LED dioda u


odreenom redoslijedu.
Prikazani cpp kd na slici 110 koristi se da generira svjetlo koje se kree
horizontalno preko 4 integrirane LED diode. Kd je jednostavan, ali bi mogao postati
poprilino sloen ako bi postojao zahtjev za vie izlaza, ili obavljanje veeg broja
izmjena on/off stanja LED dioda.
98

#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

Vjeba 8-1: Knightrider LED efekt


Koritenjem digitalnih izlaza, kreirajte program za izradu "Knightrider"13 LED
efekta na integriranim LED diodama.
#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);
led1 = 0; led2 = 0; led3 = 1; led4 = 0;
wait(0.25);
led1 = 0; led2 = 1; led3 = 0; led4 = 0;
wait(0.25);
}
}
Slika 111: 'Knightrider' LED efekt upotrebom digitalnih izlaza

13

'Knightrider' LED efekt - svjetlosni filmski efekt iz 80-ih


100

Vjeba 8-2: Knightrider LED efekt sa BusOut objektom


Koritenjem BusOut objekta, kreirajte program za izradu "Knightrider" LED efekta
na integriranim LED diodama.
#include "mbed.h"
BusOut myleds(LED4, LED3, LED2, LED1);
char x=1;
int main() {
while(1) {
for(int i=0; i<3; i++) {
// x = a << b then x = a*2^b;
x = x << 1;
// x=1,2,4,8 or x=0001,0010,0100,1000
myleds=x;
// sweep left
wait(0.2);
}
for(int i=0; i<3; i++) {
// x = a >> b then x = a/2^b;
x = x >> 1;
// x=8,4,2,1 or x=1000,0100,0010,0001
myleds=x;
// sweep right
wait(0.2);
}
}
}
Slika 112: 'Knightrider' LED efekt upotrebom BusOut objekta

'Shift' operatori, << i >>, koriste se za mnoenje i dijeljanje sa dva.

101

8.2. Rad s paralelnim LCD zaslonom


Na vjebama se koristi 16x2 znakovni LCD zaslon prikazan na slici 113 ili 16x1
znakovni zaslon GDM1601, meutim postoje mnogobrojni slini LCD zasloni iste
hardverske konfiguracije i funkcionalnosti.

Slika 113: LCD zaslon 16x2

Da bi se LCD povezao potrebno je ispuniti sljedee uvjete:


hardverska integracija: potrebno je spojiti LCD na odgovarajue MBED
prikljuke
koritenje biblioteke TextLCD

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

sabirnica podataka bit 7


pozadinsko osv. (5V)
pozadinsko osv. (GND)

Zaslon se inicijalizira slanjem kontrolnih uputa relevantnim konfiguracijskim


registrima LCD-a. To se postie postavljanjem RS, R/W i E u stanje 'low' (stanje '0'),
te zatim slanjem tonih podataka do bitova DB0-DB7. Koristi se LCD u 4-bitnom
modu, to znai da je potrebno koristiti samo zadnja 4 bita podatkovne sabirnice
(DB4-DB7). To znai da je mogue kontrolirati LCD sa samo 7 digitalnih linija, za
razliku od 8-bitnog moda gdje je potrebno 11 digitalnih linija. Nakon to je svaki
podatkovni bajt poslan, 'Enable' bit se postavlja u stanje 'on', te se ponovno vraa u
'off' stanje, to govori LCD-u da su podaci spremni i trebaju biti obraeni. Kada se
LCD inicijalizira, zaslonski podaci (display data) mogu biti poslani postavljanjem RS
bita. Ponovno, nakon to je svaki bajt zaslonskih podataka poslan, 'Enable' bit treba
biti prebaen kako bi omoguio obradu podataka.
Potrebno je prikljuiti digitalni MBED prikljuak (pin) pojedinim LCD podatkovnim
pinovima. Potrebni su sljedei izlazi:
jedan izlaz (4 bita), za zaslonske podatke LCD-a
3 izlaza, za upravljanje RS, R/W i E kontrolnim signalima
LCD zaslon se spaja sa MBED-om koritenjem konfiguracije suelja prema tablici
15.
Tablica 15: Spajanje LCD zaslona sa MBED-om
MBED
prikljuak
1
39
vanjski pot.
19
1
20
21
22
23
24
39
1

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:

Slika 114: Spajanje hardvera LCD zaslona i MBED-a

Koritenje MBED biblioteke TextLCD


MBED biblioteka 'TextLCD' naprednija je od jednostavnih funkcija koje su dosad
kreirane. TextLCD biblioteka samostalno obavlja sloeno 'setiranje' LCD-a.
Takoer, definicija TextLCD-a govori LCD-ovom objektu koji prikljuci14 se koriste
za koje funkcije. Definiranje prikljuaka odreeno je prema slici 115.

14

Prikljuak - pin
104

TextLCD lcd(int rs, int e, int d0, int d1, int d2, int d3);

Slika 115:Definiranje prikljuaka za biblioteku TextLCD


Potrebno je osigurati da su prikljuci definirani istim redoslijedom. Za postavke
prethodno opisanog hardverskog sklopa to e biti kao na slici 114.
TextLCD lcd(p19, p20, p21, p22, p23, p24);
Slika 116: Definiranje hardverskih prikljuaka za vjebu 8-4

Za prikaz znakova za LCD zaslonu koristi se naredba 'printf'.

Vjeba 8-3: Prikaz teksta na LCD zaslonu koritenjem objekta iz biblioteke


Kompajlirajte primjer "Hello World" koritenjem MBED biblioteke, koja omoguuje
jednostavnije i bre koritenje alfanumerikog LCD-a:
#include "mbed.h"
#include "TextLCD.h"
TextLCD lcd(p19, p20, p21, p22, p23, p24);
//rs,e,d0,d1,d2,d3
// TextLCD lcd(p19, p20, p21, p22, p23, p24,TextLCD::LCD8x2);
int main() {
lcd.printf("Hello World!");
}
Slika 117: Primjer jednostavnijeg koritenja alfanumerikog LCD-a

Potrebno je izvriti unos MBED datoteke iz biblioteke15 'TextLCD.h' u projekt


(desni klik i odabrati 'import library'). Ova biblioteka posjeduje mnogobrojne
unaprijed napisane specifine funkcije LCD-a. Sljedei link ukazuje na datoteke iz
biblioteke:
https://developer.mbed.org/cookbook/Text-LCD-Enhanced#new-features
Pokaziva se moe pomicati u eljeni poloaj to omoguuje odabir pozicije koja
prikazuje podatke, primjer na slici 118.
lcd.locate(3,1);
Slika 118: Odabir eljene pozicije na LCD zaslonu

15

Library file - biblioteka


105

Zaslon se rasprostire na 2 reda (0,1) i 16 stupaca (0-15). Funkcija lociranja


('lcd.locate') najprije definira stupce, a zatim redove. Navedeni primjer pomie
pokaziva u 4. stupac i 2. red. Nakon naredbe lociranja, svaka 'printf' naredba
prikazuje se na novoj lokaciji pokazivaa.
Takoer, mogue je oistiti zaslon naredbom:
lcd.cls();
Slika 119: Brisanje postojeeg sadraja LCD zaslona

Za prikaz podataka na zaslonu koristi se standardna 'printf' naredba. Za prikaz


cjelobrojne vrijednosti na zaslonu, potrebno je deklarirati varijablu, pridruiti
vrijednost varijabli, te prikazati varijablu na zaslonu koristei naredbu 'printf'.
x = 1028
lcd.printf("%i",x);
Slika 120: Prikaz cjelobrojne vrijednosti na LCD zaslonu

Imajte na umu, naredba "%i" se koristi za oznaavanje tipa izlazne varijable (u


ovom sluaju cijeli broj - integer), a zatim slijedi naziv varijable.

Vjeba 8-4: Prikaz varijabli na LCD-u


Prikaite kontinuiranu varijablu brojanja na LCD zaslonu provoenjem kda na
slici 121. Poveajte brzinu brojanja te istraite kako se poloaj pokazivaa mijenja
dok se vrijednost prebrojavanja poveava.
#include "mbed.h
#include "TextLCD.h
TextLCD lcd(p19, p20, p21, p22, p23, p24);
// rs, e, d0, d1, d2, d3
//TextLCD lcd(p19, p20, p21, p22, p23, p24,TextLCD::LCD8x2);
int x=0;
int main() {
lcd.printf("LCD Counter");
while (1) {
lcd.locate(5,1);
lcd.printf("%i",x);
wait(1);
x++;
}
}
Slika 121: Prikaz varijabli na LCD-u
106

Vjeba 8-5: Prikaz analognih ulaznih podataka na LCD-u


Prikaite analognu vrijednost na zaslonu.
Potrebno je koristiti potenciometar kako bi se omoguio analogni ulaz. Varijabla
analognog ulaza ima varirajuu vrijednost izmeu '0' i '1', gdje '0' je 0V, a '1'
predstavlja 3,3V. Za prikaz analogne ulazne vrijednosti u postocima izmeu
0-100%, potrebno je pomnoiti njezinu vrijednost sa 100. Kako bi se zaslon
kontinuirano automatski aurirao, koristi se beskonana petlja. Stoga je potrebno
oistiti zaslon te dodati vremensku odgodu kojom se podeava frekvencija
auriranja.
Potrebno je dodati stavke prikazane na slici 122 u 'main.cpp', a zatim program
prevesti i pokrenuti na MBED-u:
#include "mbed.h"
#include "TextLCD.h"
TextLCD lcd(p19, p20, p21, p22, p23, p24);
AnalogIn Ain(p17);
int percentage;

//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

Analogna vrijednost mijenja se promjenom pozicije potenciometra.

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

Potrebno je konvertirati 0,0 - 1,0 analognu ulaznu vrijednost u srazmjernu


vrijednost koja predstavlja 0 - 3,3 V. Potrebno je koristiti beskonanu petlju kojom
se omoguava kontinuirano auriranje vrijednosti napona prilikom promjene pozicije
potenciometra. Usporedite oitavanje zaslona sa stvarnim voltmetrom.

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.

Slika 123: Shema povezivanja ureaja preko IC sabirnice

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.

Funkcioniranje jednostavne IC komunikacije


IC ima ugraenu shemu adresiranja, koja pojednostavljuje povezivanje vie
ureaja zajedno. Openito, ureaj koji zapoinje komunikaciju naziva se 'master'16,
a ureaj koji je pozivan 'master'-om, naziva se 'slave'17. Svaki IC kompatibilni 'slave'
ureaj ima unaprijed definirane adrese ureaja. 'Slave'-ovi nadziru stanje sabirnice,
te reagiraju iskljuivo na podatke i naredbe povezane sa njihovim pripadajuim

16

Master (eng.) - gospodar

17

Slave (eng.) - rob


109

adresama. Meutim, ova metoda adresiranja, ograniava broj identinih 'slave'


ureaja koji mogu postojati na jednoj sabirnici, jer svaki ureaj mora imati
jedinstvenu adresu. Kod nekih ureaja, mogue je nekoliko adresnih bitova
konfigurirati od strane korisnika.
Prijenos podataka zapoinje 'Master'-ovom signalizacijom 'Start' stanja, koja je
praena sa jednim ili dva bajta u kojima su sadrane adrese i kontrolne informacije.
'Start' stanje je definirano prijelazom SDA iz '1' u '0' dok je SCL u '1'.
'Stop' stanje je definirano prijelazom SDA iz '0' u '1' dok je SCL u '1'.
Za svaki SDA podatkovni bit, generira se jedan SCL 'clock' impuls, te se podaci
mogu jedino mijenjati kada je 'clock' u '0'.

Slika 124: Funkcioniranje jednostavne IC komunikacije

Bajt koji indicira 'Start' stanje sastoji se od 7 adresnih bitova, te jednog


podatkovnog 'direction' bita zaduenog za itanje ili pisanje (Read/Write). Svi
preneseni podaci su u jedinicama od jednog bita, i ne postoje ogranienja na broj
bajtova prenesenih u jednoj poruci. Svaki bajt mora biti popraen sa 1-bitnim
podatkom 'potvrde' koja dolazi od strane prijemnika signala, a za to vrijeme
predajnik signala zanemaruje SDA podatkovno upravljanje.

110

Slika 125: Prijenos podataka kod jednostavne IC komunikacije

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

IC Master, koriten za komunikaciju sa IC 'slave' ureajima


Koritenje
Stvori IC Master suelje, povezano na specificirane prikljuke
postavljanje frekvencije IC suelja
prijem podatka sa IC slave
itanje jednog bajta sa IC sabirnice
predaja podataka na IC slave
pisanje jednog bajta na IC sabirnicu
stvaranje uvjeta za start na IC sabirnici
stvaranje uvjeta za stop na IC sabirnici

IC suelje koristi se na MBED-ovim pinovima p9/p10 i p28/p27.


Podatkovni signali SDA i SCL trebaju biti napajani sa 3,3V, te se za ispravnu
konfiguraciju kruga koristi otpornik optimalne vrijednosti. U ovom sustavu potrebno
je izabrati otpornik vrijednosti od 2,2 k

111

Slika 126: IC prikljuci na MBED-u

9.2. Funkcioniranje MSP430G_I2C_SLAVE modula


Upotrebom MSP430G2553 mikroupravljaa proizvoaa TI izraen je na TVZ-u
modul pod nazivom MSPG_I2C_SLAVE (slika 127).

Slika 127 MSP430G I2C SLAVE

112

Mikroupravlja MSP430G sa upisanim programom moe se koristiti i zasebno na


eksperimentalnoj ploici u vjebama komunikacije sa MBED modulom. Shema
MSPG_I2C_SLAVE modula prikazana je na slici 128.

Slika 128 Shema modula MSPG_I2C_SLAVE

Za konfiguriranje modula MSPG_I2C_SLAVE potrebno je:


Koristiti nizove 8-bitnih vrijednosti za podatkovne varijable, jer IC
sabirnica moe

komunicirati samo sa podacima vrijednosti jednog bajta.

Poslati sa Master mikroupravljaa na Slave dva bajta (TX_0 i TX_1) pri


emu bajt TX_0 odreuje komandu odnosno postavlja Slave u jedno od tri
mogua naina rada, a bajt TX_1 nosi podatak koji treba biti postavljen na
izlazni port BOut mikroupravljaa MSP430G.
Primiti na Master mikroupravlja dva bajta koje kao odgovor alje Slave
(RX_0 i RX_1). Sadraj tih bajtova odreen je prethodnom komandom sa
113

Mastera. Na tablici 17 prikazan je saetak protokola koji je programiran za


modul MSPG_I2C_SLAVE.

Tablica 17: Komunikacijski protokol MSPG_I2C_SLAVE


MASTER
TX_0

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.

Povezivanje MSPG_I2C_SLAVE sa MBED-om


Modul MSPG_I2C_SLAVE se spaja sa MBED-om na nain prikazan na slici 129:

114

Slika 129: Povezivanje MSPG_I2C_SLAVE sa MBED-om

Hardverski prikljuci potrebni za povezivanje prikazani su u tablici 18.

Tablica 18 Povezivanje MBED-a sa MSP430G


Prikljuak

MBED pin

MSP430G pin

Napomena

VCC (3,3V)

40

GND (0V)

20

SDA

15

2,2 K otpornik prema Vcc

SCL

10

14

2,2 K otpornik prema Vcc

115

Vjeba 9-1: Upotreba MSPG_I2C_SLAVE modula


:Spojite modul na IC sabirnicu. Provjerite tonost podataka koji se kontinuiranim
auriranjem promjene temperature mogu oitati na zaslonu. Kako bi se provjerila
ispravnost oitavanja podataka tj. temperature, ispitajte promjene koje nastaju
ukoliko se integrirani krug MSP430G pritisne prstom, ili se zagrije na neki drugi
nain.
Program na slici 130 konfigurira MSPG_I2C_SLAVE modul, oitava i pretvara
podatke u stupnjeve Celzijusa (C), te zatim svake sekunde prikazuje vrijednosti na
zaslonu.
#include "mbed.h"
I2C MSP430G(p9, p10);
Serial pc(USBTX, USBRX);
const int addr = 0x92;
char config_t[2];
char temp_read[2];
float temp;
int main() {
while(1) {
config_t[0] = 0xC0;
config_t[1] = 0x55;

//sda, sc1
//tx, rx
// transmitt buffer
// read buffer

//config slave to int temp


// config data byte1, BOut

MSP430G.write(addr, config_t, 2);


wait_us(20);
MSP430G.read(addr, 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(1);
}
}

Slika 130: Primjer cpp koda za temperaturni mod MSP430G modula

Vjeba 9-2: Mjerenje napona na ulazu MSPG_I2C_SLAVE


Konfigurirajte MSPG_I2C_SLAVE modul da mjeri napon na analognom ulazu
Ain0. Izmjerene podatke vrijednosti napona prikaite na zaslonu.
116

9.3. Povezivanje vie ureaja na IC sabirnicu


Vjeba 9-3: Dva modula MSPG_I2C_SLAVE na istoj sabirnici
Spojite dva modula MSPG_I2C_SLAVE na istu IC sabirnicu. Pazite da moduli
imaju razliite vlastite adrese (ulazi Adr0 i Adr1). Aurirajte zaslon da kontinuirano
prikazuje promjene temperature sa oba modula.

Slika 131 Dva MSPG_I2C_SLAVE na istoj sabirnici


#include "mbed.h"
I2C MSP430G(p9, p10);
//sda, sc1
Serial pc(USBTX, USBRX);
//tx, rx
const int addr0 = 0x92;
const int addr1 = 0x90;
char config_t[2];
// transmitt buffer
char temp_read[2];
// read buffer
float temp, Uin;
int main() {
while(1) {
config_t[0] = 0xC1;
//config slave to Ain
config_t[1] = 0xff;
// config data byte1, BOut
MSP430G.write(addr0, config_t, 2);
wait_us(20);
MSP430G.read(addr0, temp_read, 2); //read the two-byte temp data
float Uin = temp_read[0]+temp_read[1]*256;
Uin = Uin/1023;
pc.printf("Ain = %.4f V\n\r", Uin*1.5); // print on screen
117

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);
}
}

Slika 132 Programski kod uz vjebu 9-3


Dodatne vjebe
Vjeba 9-4: Prikaz broja na LED displeju SLAVE modula
Izradite program koji e omoguiti da MBED ita analogne vrijednosti napona sa
MSPG_I2C_SLAVE modula te ih u obliku postotka x 10 prikazuje na LED displeju
tog istog modula.

118

10. Serijska komunikacija sa SPI-om


10.1. Upoznavanje sa SPI-om
Naziv SPI je skraenica za 'Serial Peripheral Interface Bus' to bi u prijevodu
znailo 'serijsko periferno sabirniko suelje'. SPI je serijski podatkovni protokol koji
djeluje sa master/slave odnosom. Kada 'master' inicijalizira komunikaciju i odabire
'slave' ureaj, podaci mogu biti istodobno preneeni u jednom ili oba smjera.
'Master' mora poslati bajt kako bi primio bajt - prijenos 'dummy bajt'18-a je tipian
nain koji omoguava itanje transakcije
SPI protokol koristi etiri signala:
serial clock (SCLK)
'master' data output, 'slave' data input (MOSI)
'master' data input, 'slave' data output (MISO)
slave chip select (CS)

Slika 133: Shema SPI protokola

18

dummy byte>bajt koji slui kao popunjava ili filer

119

U sluaju kada postoji vie 'slave' ureaja, 'master' mora davati jedinstveni izlazni
CS signal za svaki 'slave'.

Funkcioniranje jednostavne SPI komunikacije


SPI je pogodan za prijenos podatkovnih tokova, npr. za podatkovnu komunikaciju
izmeu mikroupravljaa ili za prijenos podataka iz analogno-digitalnog pretvaraa.
SPI moe postii vee brzine prijenosa podataka od IC-a, jer ne alje adresne i
kontrolne informacije, te ne ukljuuje 'bit potvrde' za svaki bit. SPI podatkovna
komunikacija je idealna za koritenje u aplikacijama digitalne obrade signala, gdje
se redovito razmjenjuju podaci izmeu 'master'-a i 'slave'-a.
SPI prijenos podataka se inicijalizira na sljedei nain. Najprije 'master'
konfigurira SPI takt (SCLK) kako bi bio frekvencijski podran od strane 'slave'
ureaja koji prima informacije (do 70 MHz). 'Master' postavlja chip select signal (CS)
namijenjenog primajueg 'slave'-a na 0V. 'Master' zatim ukljuuje pulsiranje takta
SCLK, ime se ukazuje na poetak prijenosa podataka. 'Master' istovremeno alje
podatke (kao uzastopne bitove) na MOSI. Broj bitova (u svakom podatkovnom
okviru) moe biti konfiguriran, ali obino je izmeu 4 i 16 bita. 'Slave' istim nainom
vraa podatke na MISO. Takoer, 'master' mora konfigurirati polaritet takta CPOL
(eng. clock polarity), te fazu takta CPHA (eng. clock phase).

Slika 134: Dijagram funkcioniranja jednostavne SPI komunikacije

Stoga, kod SPI-a postoje etiri moda, tj. naina rada prama slici 133.
120

Slika 135: Modovi rada kod SPI komunikacije

Openito, SPI ureaji su konstruirani za rad u jednom od etiri moda rada, a to je


opisano u podatkovnoj tablici svakog ureaja.

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

SPI Master, koriten za komunikaciju sa SPI 'slave' ureajima


Koritenje
Oformi SPI mastera na specificiranim pinovima
Konfiguriraj mod prijenosa podataka i duinu podataka
Postavi frekvenciju takta sabirnice
Pii na SPI Slave i vrati odgovor

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.

Slika 136: SPI prikljuci na MBED-u

Pridruene (eng. default) postavke SPI suelja na MBED-u su:


Frekvencija sata od 1 MHz
122

Podatkovna duljina od 8 bita


Pridrueni mod rada 0

11. Memorija i upravljanje podacima


11.1. Tipovi elektronike memorije
Jednostavna jednobitna memorija je kao 'kovanica'. To je "bistabil", ima dva
poloaja; 'pismo' ili 'glava'. Dogovorno, 'glava' predstavlja logiku '1', a 'pismo'
predstavlja logiku '0'. Sa 8 kovanica, 8-bitni broj moe biti zastupljen i pohranjen.
Alternativno 'kovanici', koristi se sklop elektronikog bistabila ("flip-flop").
Krugovi b) i c) su takoer stabilni u samo dva stanja, te se svaki moe koristiti za
spremanje podatka od jednog bita

Slika 137: Elektronika memorija

123

Slika 138: Tipovi elektronike memorije

Izbrisiva memorija (eng. volatile memory) zahtjeva napajanje za


odravanje pohranjenih informacija.
Postojana memorija (eng. non-volatile memory) odrava pohranjene
informacije, ak i bez napajanja.

Izbrisiva memorija (eng. Volatile Memory)


Primjer izbrisive memorije je RAM memorija (eng. Random Access Memory), u
prijevodu 'memorija s nasuminim pristupom'.
SRAM (u prijevodu 'statiki RAM') pohranjuje podatke koji koriste "flip-flop"
stanje. Obino postoje 6 tranzistora u jednoj SRAM jedinici. Zahtjeva nisko
naponsko napajanje, jednostavnog je suelja i relativno je jeftin.
DRAM (u prijevodu 'dinamiki RAM') koristi jedan tranzistor i jedan kondenzator
za pohranjivanje podatka od jednog bita. DRAM zauzima reducirani silicijski prostor.
Takoer, zahtjeva logiku osvjeavanja kako bi se punio kondenzator svakih 10 do
100 ms. Zahtjevi napajanja su takoer vei u odnosu na SRAM

Postojana memorija (eng. Non-Volatile Memory)


Memorije koje su samo jednom programabilne:
ROM memorija (eng. Read Only Memory), u prijevodu 'memorija iz koje
se podaci mogu samo itati'
PROM memorija (Programmable ROM)
124

EPROM memorija (eng. Electrically Programmable Read Only Memory),


u prijevodu 'izbrisiva programabilna ispisna memorija'
Glavna osobina je trajna pohrana podataka koji se mogu samo itati, sve dok se
posebnim postupkom ne izbriu stari i upiu novi podaci. Brie se osvjetljavanjem
jakim ultraljubiastim svjetlom kroz poseban prozirni prozori na gornjoj strani
integriranog sklopa.

EEPROM memorija (eng. Electrically Erasable and Programable Read Only


Memory), u prijevodu 'elektrino izbrisiva programabilna ispisna memorija';
omoguava pojedinano pisanje, itanje i brisanje bajtova podataka.
Flash memorija je tip EEPROM-a, ali bez sposobnosti za brisanjem pojedinanih
podatkovnih bajtova. Vie bajtova moraju biti izbrisani u bilo kojem trenutku, 'u trenu'
(eng. flash). Flash i EEPROM memorije mogu podnijeti do 100.000 ciklusa pisanja
i brisanja

Tip i funkcija memorije


Mikroprocesori koriste memoriju za odravanje programskog koda (programska
memorija) i radnih podataka u ugraenom sustavu (podatkovna memorija).
Kada se procesor ukljui (tj. pokrene), programski podaci moraju biti uitani i
spremni. Openito, postojana memorija (eng. Non-Volatile Memory) je potrebna za
programsku memoriju. esto nema potrebe za zadravanjem (tj. pamenjem)
podataka kada je proizvod iskljuen, stoga se izbrisiva memorija (eng. Volatile
Memory) preferira za podatkovnu memoriju.

11.2. Upotreba podatkovnih datoteka na MBED-u


Programski jezici C/C++ omoguuju:
otvaranje podataka (eng. open)
itanje podataka (eng. read)
125

pisanje podataka (eng. write)


skeniranje podataka (eng. scan) na odreenim mjestima
Takoer, podaci se mogu pohranjivati:
kao znakovi (eng. char)
kao rijei ili nizovi podatka, u karaktere polja
Mogue je spremanje podatkovnih datoteka u odreena podruja 'flash' memorije
instalirane na MBED-u.
-Prilikom povezivanja sa MBED-ovom podatkovnom memorijom, koriste se
standardne C/C++ naredbe definirane u ulazno-izlaznoj biblioteci 'stdio.h'.
Tablica 20: Biblioteka 'stdio.h'

Saetak korisnih 'stdio.h' funkcija za provedbu pristupa datotekama na


MBED-u:
str - sadri niz znakova koji trebaju biti napisani
stream - pokaziva na objektnu datoteku koja identificira tok u koji e niz
podataka (eng. string) biti napisan
Kompajleru mora biti reeno gdje se spremaju podatkovne datoteke, a to se
obavlja upotrebom MBED-ove 'LocalFileSystem' deklaracije:
LocalFileSystem local("local");
Slika 139: 'LocalFileSystem' deklaracija
126

Time se programima omoguuje itanje i pisanje podataka na istom disku koji se


koristi za programiranje MBED mikroupravljaa. Nakon to je datoteka stvorena,
koriste se standardne C pristupne funkcije za rad s datotekom (tj . za otvaranje,
itanje i pisanje).
Datoteku je mogue otvoriti sljedeom naredbom:
FILE* pFile = fopen("/local/datafile.txt","w");
Slika 140: Naredba 'fopen' za otvaranje datoteka

Ovime se pokaziva skraenog imena 'pFile' pridruuje datoteci na specificiranoj


lokaciji koja je odreena 'fopen' naredbom. Takoer, kompajleru je potrebno
specificirati kakav pristup se pridodaje datoteci:
'read or write' pristup datoteci odreuje se "w" sintaksom
'read only' pristup datoteci odreuje se "r" sintaksom
Ako datoteka ve ne postoji, 'fopen' naredba automatski kreira datoteku na
specificiranoj lokaciji.
Prilikom zavretka koritenja datoteke za itanje ili pisanje, dobra praksa je
zatvoriti datoteku:
fclose(pFile);
Slika 141: Naredba 'fclose' za zatvaranje datoteka

Pisanje podataka u datoteku


Pohrana numerikih podataka obavlja se na jednostavan nain, tj. pohranom
pojedinanih 8-bitnih podatkovnih vrijednosti ('char'). Naredba 'fputc' omoguuje
navedeno na sljedei nain:
char write_var=0x0F; fputc(write_var, pFile);
Slika 142: Naredba 'fputc' omoguuje pisanje podataka

Ovime se varijabla 'write_var' pohranjuje na podatkovnu datoteku

itanje podataka iz datoteke


127

Podaci se oitavaju iz datoteke u varijabli na sljedei nain:


read_var = fgetc(pFile);
Slika 143: Naredba 'fgetc' omoguuje itanje podataka

Upotrebom 'stdio.h' naredbi mogue je itati i pisati rijei i nizove podataka, te


pretraivati ili se kretati kroz datoteke u potrazi za pojedinim podatkovnim
elementima.

128

Vjeba 11-1: Stvaranje datoteke i upis


Kompajlirajte program koji stvara podatkovnu datoteku i upisuje vrijednost 0x23
u tu datoteku. Datoteka se sprema na MBED. Program zatim otvara i oitava
podatkovnu vrijednost te je prikazuje na zaslonu terminalne aplikacije.
#include "mbed.h"
Serial pc(USBTX,USBRX);
// setup terminal link
LocalFileSystem local("local");
// define local file system
int write_var;
int read_var;
// create data variables
int main ()
{
FILE* File1 = fopen("/local/datafile.txt","w"); // open file
write_var=0x23;
// example data
fputc(write_var, File1);
// put char (data value) into file
fclose(File1);
// close file
FILE* File2 = fopen ("/local/datafile.txt","r");
read_var = fgetc(File2);
fclose(File2);
pc.printf("input value = %i \n",read_var);

// open file for reading


// read first data value
// close file
// display read data value

}
Slika 144: Primjer cpp koda za vjebu 11-1

Potrebno je otvoriti kreiranu datoteku 'datafile.txt' u programu za obradu teksta i


trebao bi se vidjeti znak ljestvi (#) u gornjem lijevom kutu. Inae, ASCII znak za 0x23
je znak '#'.

Vjeba 11-2: Prikaz sadraja datoteke na terminalu


: Kompajlirajte program koji stvara datoteku i upisuje tekst u tu datoteku. Datoteka
se sprema na MBED. Program zatim otvara i oitava tekst te ga prikazuje na zaslonu
terminalne aplikacije.
#include "mbed.h"
Serial pc(USBTX,USBRX);
// setup terminal link
LocalFileSystem local("local");
// define local file system
char write_string[64];
// character array up to 64 characters
char read_string[64];
// create character arrays(strings)
int main ()
{
FILE* File1 = fopen("/local/textfile.txt","w");
// open file access
fputs("lots and lots of words and letters", File1);
// put text into file
fclose(File1);
// close file
129

FILE* File2 = fopen ("/local/textfile.txt","r");


fgets(read_string,256,File2);
fclose(File2);
pc.printf("text data: %s \n",read_string);

// open file for reading


// read first data value
// close file
// display read data string

}
Slika 145: Primjer cpp koda za vjebu 11-2

Potrebno je otvoriti datoteku 'textfile.txt' i trebao bi se vidjeti ispravan tekst.

Upotreba formatiranih podataka


Naredba 'fprintf' se koristi za formatiranje podataka prilikom rada sa datotekama,
te ima vrlo slinu sintaksu kao i 'printf', osim to je potrebno unijeti pokaziva sa
imenom datoteke. Primjer 'fprintf' naredbe je unos specifinih zgoda (eng. event)
podatkovnim datotekama i obuhvaanje promijenjivih podatkovnih vrijednosti, kao
to su vrijeme, senzorsko mjerenje ulaznih podataka i izlazne kontrolne postavke.
Vjeba koristi 'fprintf' naredbu u projektu koji je kontroliran prekidom prekidaa.
Svaki put kad je tipkalo prekidaa pritisnuto, LED dioda mijenja stanje. Takoer, za
svaki preklopni sluaj, podatak 'log.txt' se aurira kako bi se zabiljeilo proteklo
vrijeme od prethodnog pritiska na tipkalo prekidaa, te kako bi se zabiljeilo tekue
stanje LED diode. Takoer, u vjebi 3, ako je tipkalo prekidaa pritisnuto vie no
jednom u kratkom vremenskom intervalu (tapkanje ili je dugotrajno tritisnuto),
provodi jednostavan 'debounce' broja vremena kojim se izbjegavaju viestruki
prekidi, a time i operacije upisivanja.

Vjeba 11-3: Koritenje fprintf naredbe


Kompajlirajte program koji koristi naredbu 'fprintf' u projektu koji je kontroliran
prekidom prekidaa. Svakim preklopnim sluajem prebacuje se stanje LED diode,
a datoteka 'log.txt' se aurira kako bi zabiljeilo vrijeme koje je proteklo od
prethodnog pritiska na tipkalo prekidaa, te kako bi se zabiljeilo tekue stanje LED
diode.
#include "mbed.h"
InterruptIn button(p30);

// Interrupt on digital input p30


130

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.

Vjeba 11-5: Biljeenje analognih podataka


Kreirajte program koji biljei vrijednost analognog signala u trajanju od 5 sekundi.
Koristite potenciometar za generiranje analognog ulaznog signala.
Potrebno je specificirati vrijeme uzorkovanja za pohranu analognih vrijednosti,
recimo na 100ms. Takoer, potrebno je osigurati da mjereni podaci zapisuju vrijeme
i vrijednosti napona, kako bi se mogao iscrtati dijagram izmjerenih podataka, ime
bi se vizualizirala ulazna oitanja.

131

12. Upotreba MBED mikroupravljaa u praksi


U ovom dijelu rada, na proizvoljnom primjeru je demonstrirana upotreba MBED
LPC1768 mikroupravljaa u TVZ-ovom laboratoriju za mikroraunala.
Primjer je je proizvoljan. Na LCD zaslonu se ispisuju podaci, uz kontinuiranu
promjenu svaku sekundu, ispisuje se sljedei sadraj:
TVZ > SPEC ELO > Dipl.> Zadatak > E334> **MBED** > Tomislav > Hadrovic
Nakon to se sadraj jednom ispie na LCD zaslonu, tipkalom se odreuje
poetak sviranja melodije iz piezo zvunika. Kada je tipkalo pritisnuto, upali se
zelena LED dioda i piezo zvunik poinje svirati melodiju hrvatske himne "Lijepa
naa". Nakon to je melodija zavrena, pali se crvena LED dioda koja oznaava kraj
izvoenja programa.
Sljedea tablica govori o potrebnom spajanju hardvera kojim je primjer izvren:
Tablica 21: Spajanje prikljuaka kojim je ostvaren primjer

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

Boja ice u primjeru

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

Kompletan hardver spojen je na maketi19.


Potenciometar koji je upotrebljen je 1k. Kliza potenciometra je spojen na
prikljuak 3 LCD zaslona, a drugi kraj potenciometra je spojen na OV. Inae,
potenciometrom se odreuje kontrast.
Jedan kraj tipkala je spojen na prikljuak 8 MBED-a, a drugi kraj je spojen na 0V.
LED diode spojene su sa MBED-om, tako da je pozitivni pol diode (anoda) spojen
sa MBED-om, a negativni pol (katoda) je spojen na GND. Piezo zvunik je jednim
krajem (+) spojen na prikljuak 21 MBED-a, a sa drugim krajem je spojen na GND.
Hardver je spojen na sljedei nain:

Slika 147: Spajanje hardvera u primjeru

19

Breadboard (eng.) - maketa


133

Programski cpp kod kojim je primjer ostvaren.


//*primjer Hadrovic*
#include "mbed.h"
#include "TextLCD.h"
TextLCD lcd(p20, p18, p13, p12, p11, p10); // rs, e, d4-d7
DigitalIn tipkalo(p8);
DigitalOut zelenaled(p5);
DigitalOut crvenaled(p6);
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() {
int start=0;
zelenaled=0;
crvenaled=0;

//poetno stanje dioda

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;
}
}

///// pokretanje melodije


// set PWM period
// set duty cycle
// hold for beat period

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

You might also like