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

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

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


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

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

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

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


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

6. 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. SERIJSKA KOMUNIKACIJA SA SPI-OM .................................................................................... 119

10.1. UPOZNAVANJE SA SPI-OM ........................................................................................................... 119

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

3
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

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

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

9
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

1 Embedded system (eng.) - ugradbeni sustav

2 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

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

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

5 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'.

6 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 12-
bitnu analogno-digitalnu pretvorbu; te jedan kanal koji omoguuje 10-bitnu digitalno-
analognu 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.

7 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


Izlazna ethernet odailjaka linija,
TD-
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 Digitalni izlaz


Funkcija Koritenje
DigitalOut stvori objekt DigitalOut koji je spojen na definirani pin izlaza
write postavi izlaz, definiran kao 0 ili 1 (int)
read ita postavljeni izlaz, prikazan kao 0 ili 1 (int)
operator = skraenica za pisanje
operator int() 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 izlaz1(p5);
DigitalOut izlaz2(p6);
DigitalOut izlaz3(p7);
DigitalOut semafor(LED1); // izlaz na ugraenu svjetleu diodu LED1
itd
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

IC1 V3.3
1 40
GND VOUT
2 39
3
VIN
USB VU
38
VB IF-
4 37
nR IF+
5 36
P5 RD-
6 35
P6 RD+
7 34
P7 TD-
8 33
P8 TD+
9 32
P9 D-
D1 D2 10
P10 D+
31
11
12
P11 MBED P30
30
29
13
P12 NXP P29
28
P13 P28
14 LPC1768 27
P14 P27
15 26
P15 P26
16 25
P16 P25
17 24
P17 P24
18 23
P18 P23
R1 R2 19
P19 P22
22

(499 ohm) (499 ohm) 20


P20 P21
21

a) shema 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 Digitalni ulaz


Funkcija Koritenje
DigitalIn stvori objekt DigitalIn koji je spojen na definirani pin ulaza
read ita ulaz, prikazan kao 0 ili 1 (int)
mode postavi mod ulaznog pina (PullUp, PullDown, PullNone, OpenDrain)
operator int() 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

IC1 V3.3
1 40
GND VOUT
2 39
3
VIN
USB VU
38
VB IF-
4 37
nR IF+
5 36
P5 RD-
6 35
P6 RD+
7 34
P7 TD-
SW1 8
P8 TD+
33
9 32
P9 D-
D1 D2 10
P10 D+
31
11
12
P11 MBED P30
30
29
13
P12 NXP P29
28
P13 P28
14 LPC1768 27
SW4 P14 P27
15 26
P15 P26
16 25
P16 P25
17 24
P17 P24
18 23
P18 P23
R1 R2 19
P19 P22
22
(499 ohm) (499 ohm) 20
P20 P21
21

a) shema 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); // Pull up internal resistor
while(1) {
if (sw1==1) {
greenled = 0; //green led is off
redled = 1; // flash red led
wait(0.2);
redled = 0;
wait(0.2);
}
else if (sw1==0) {
redled = 0; //red led is off
greenled = 1; // flash green led
wait(0.2);
greenled = 0;
wait(0.2);
}
}
}

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); // Pull up internal resistor
while(1) {
switch(inputSW) {
case 0x1:
greenled = 1; //green led is on
redled = 0; //red led is off
break;
case 0x2:
greenled = 0; //green led is off
redled = 1; //red led is on
break;
case 0x4:
case 0x8:
greenled = 1; //green led is on
redled = 1; //red led is on
break;
default :
greenled = 0; //green led is off
redled = 0; //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 Analogni ulaz


Funkcije Koritenje
AnalogIn Stvori objekt AnalogIn za analogni ulaz spojen na definirani pin
read ita ulazni napon prikazan u obliku realnog broja
u rasponu [0,0 do 1,0]
read_u16 ita ulazni napon prikazan u obliku cijelog broja (unsigned short)
u rasponu [0x0, 0xFFFF]
operator float 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 Analogni izlaz


Funkcija Koritenje
AnalogOut Stvori objekt AnalogOut za analogni izlaz spojen na definirani
pin
write Postavi izlazni napon, definiran kao postotak (float)
write_u16 Postavi izlazni napon, prikazan u obliku cijelog broja (unsigned
short) u podruju [0x0, 0xFFFF]
read ita trenutno postavljeni izlazni napon, mjeren kao postotak
(float)
operator= skraenica za pisanje
operator float() 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; // 0.25*3.3V = 0.825V
wait(0.1);
Aout=0.5; // 0.5*3.3V = 1.65V
wait(0.1);
Aout=0.75; // 0.75*3.3V = 2.475V
wait(0.1);
}
}
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 i
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

8 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

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

9 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 Digitalni izlaz pulsno-irinske modulacije


Funkcije Koritenje
PwmOut Stvori objekt PwmOut spojen na definirani pin
write Postavi iznos aktivnog omjera (duty cycle), specificiran kao
normalizirani realni broj (0,0 1,0)
read Proitaj postavljen iznos aktivnog omjera (duty cycle), izmjeren
kao normalizirani realni broj (0,0 1,0)
period Postavi periodu T PWM-a, specificiranu u sekundama (float),
period_ms millisekundama (int) ili mikrosekundama (int), a pritom ne
period_us mijenjajui iznos aktivnog omjera
pulsewidth Postavi PWM irinu impulsa t1, specificiranu u sekundama
pulsewidth_ms (float), millisekundama (int) ili mikrosekundama (int), a pritom ne
pulsewidth_us mijenjajui iznos periode
operator= skraenica za pisanje
operator float() 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); // tx, rx
PwmOut PWM1(p21);
float brightness=0.0;

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 Tajmer ope namjene


Funkcije Koritenje
start Pokretanje tajmera
stop Zaustavljanje tajmera
reset Postavljanje tajmera u 0
read proitaj vrijeme koje je proteklo u s
read_ms proitaj vrijeme koje je proteklo u ms
read_us 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; // define timer object


DigitalOut output1(p5); // digital output
void task1(void); // 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){ // task function


output1=!output1; // 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; // toggle output1
}
void task2(void){
output2=!output2; // 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 Ticker
Funkcija Koritenje
attach Pridjelite funkciju koja se treba pozvati pojavom tickera,
navoenjem intervala u sekundama
attach Pridjelite funkciju (lana objekta ili klase) koja se treba pozvati
pojavom tickera, navoenjem intervala u sekundama
attach_us Pridjelite funkciju koja se treba pozvati pojavom tickera,
navoenjem intervala u us
attach_us Pridjelite funkciju (lana objekta ili klase) koja se treba pozvati
pojavom tickera, navoenjem intervala u us
detach 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() { // flip 1 function
led1 = !led1;
}
void flip2() { // flip 2 function
led2 = !led2;
}

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 Prekidni ulaz


Funkcija Koritenje
InterruptIn Kreiraj funkciju InterruptIn povezanu na navedeni prikljuak
rise Pridjeli funkciju koja se poziva ako se desi rastui brid signala na
ulazu
rise Pridjeli funkciju (lana objekta ili klase) koja se poziva ako se desi
rastui brid signala na ulazu
fall Pridjeli funkciju koja se poziva ako se desi padajui brid signala
na ulazu
fall Pridjeli funkciju (lana objekta ili klase) koja se poziva ako se desi
padajui brid signala na ulazu
mode 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); // Interrupt on digital pushbutton input p18
DigitalOut led1(p5); // 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); // Interrupt on digital pushbutton input p18
DigitalOut led1(p5); // digital out to p5
Timer debounce; // define debounce timer
void toggle(void); // function prototype
int main() {
debounce.start();
button.rise(&toggle); // attach the address of the toggle
} // function to the rising edge
void toggle() {
if (debounce.read_ms()>200) // only allow toggle if debounce timer
led1=!led1; // has passed 200 ms
debounce.reset(); // 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
ZNAMENKA
(p12, p11, p10, p9, p8, p7, p6, p5)
00111111 0
00000110 1
01011011 2
01001111 3
01100110 4
01101101 5
01111101 6
00000111 7
01111111 8
01101111 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); // segment A
DigitalOut B(p6); // segment B
DigitalOut C(p7); // segment C
DigitalOut D(p8); // segment D
DigitalOut E(p9); // segment E
DigitalOut F(p10); // segment F
DigitalOut G(p11); // segment G
DigitalOut DP(p12); // segment DP

int main() {
while (1) { // infinite loop
A=1; B=1; C=1; D=1; E=1; F=1; G=0; DP=0; // set LEDs '0'
wait(0.2);
A=0; B=1; C=1; D=0; E=0; F=0; G=0; DP=0; // set LEDs '1'
wait(0.2);
A=1; B=1; C=0; D=1; E=1; F=0; G=1; DP=0; // set LEDs '2'
wait(0.2);
A=1; B=1; C=1; D=1; E=0; F=0; G=1; DP=0; // set LEDs '3'
wait(0.2);
A=0; B=1; C=1; D=0; E=0; F=1; G=1; DP=0; // set LEDs '4'
wait(0.2);
A=1; B=0; C=1; D=1; E=0; F=1; G=1; DP=0; // set LEDs '5'
wait(0.2);
A=1; B=0; C=1; D=1; E=1; F=1; G=1; DP=0; // set LEDs '6'
wait(0.2);
A=1; B=1; C=1; D=0; E=0; F=0; G=0; DP=0; // set LEDs '7'
wait(0.2);
A=1; B=1; C=1; D=1; E=1; F=1; G=1; DP=0; // set LEDs '8'
wait(0.2);
A=1; B=1; C=1; D=1; E=0; F=1; G=1; DP=0; // set LEDs '9'
wait(0.2);
}
}
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); // ABCDEFGDP

int main() {
while (1) { // infinite loop
Seg1=0x3F; // 00111111 binary LEDs to '0'
wait(0.2);
Seg1=0x06; // 00000110 binary LEDs to '1'
wait(0.2);
Seg1=0x5B; // 01011011 binary LEDs to '2'
wait(0.2);
Seg1=0x4F; // 01001111 binary LEDs to '3'
wait(0.2);
Seg1=0x66; // 01100110 binary LEDs to '4'
wait(0.2);
Seg1=0x6D; // 01101101 binary LEDs to '5'
wait(0.2);
Seg1=0x7D; // 01111101 binary LEDs to '6'
wait(0.2);
Seg1=0x07; // 00000111 binary LEDs to '7'
wait(0.2);
Seg1=0x7F; // 01111111 binary LEDs to '8'
wait(0.2);
Seg1=0x6F; // 01101111 binary LEDs to '9'
wait(0.2);
}
}
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) { // function 'SegConvert'


char SegByte=0x00;
switch (SegValue) { //DPGFEDCBA
case 0 : SegByte = 0x3F;break; // 00111111 binary
case 1 : SegByte = 0x06;break; // 00000110 binary
case 2 : SegByte = 0x5B;break; // 01011011 binary
case 3 : SegByte = 0x4F;break; // 01001111 binary
case 4 : SegByte = 0x66;break; // 01100110 binary
case 5 : SegByte = 0x6D;break; // 01101101 binary
case 6 : SegByte = 0x7D;break; // 01111101 binary
case 7 : SegByte = 0x07;break; // 00000111 binary
case 8 : SegByte = 0x7F;break; // 01111111 binary
case 9 : SegByte = 0x6F;break; // 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() { // main program


while (1) { // infinite loop
for (char i=0;i<10;i++) {
Seg1=SegConvert(i);
wait(0.2);
}
}
}
char SegConvert(char SegValue) { // function 'SegConvert'
char SegByte=0x00;
switch (SegValue) { //DPGFEDCBA
case 0 : SegByte = 0x3F;break; // 00111111 binary
case 1 : SegByte = 0x06;break; // 00000110 binary
case 2 : SegByte = 0x5B;break; // 01011011 binary
case 3 : SegByte = 0x4F;break; // 01001111 binary
case 4 : SegByte = 0x66;break; // 01100110 binary
case 5 : SegByte = 0x6D;break; // 01101101 binary
case 6 : SegByte = 0x7D;break; // 01111101 binary
case 7 : SegByte = 0x07;break; // 00000111 binary
case 8 : SegByte = 0x7F;break; // 01111111 binary
case 9 : SegByte = 0x6F;break; // 01101111 binary
}
return SegByte;
}
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); // A,B,C,D,E,F,G,DP
BusOut Seg2(p13,p14,p15,p16,p17,p18,p19,p20);
char SegConvert(char SegValue); // function prototype

int main() { // main program


while (1) { // infinite loop
for (char j=0;j<10;j++) { // counter loop 1
Seg2=SegConvert(j); // tens column
for (char i=0;i<10;i++) { // counter loop 2
Seg1=SegConvert(i); // units column
wait(0.2);
}
}
}
}

// 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); // function to initialise 7-seg displays


void HostInit(void); // function to initialise the host terminal
char GetKeyInput(void); // function to get a keyboard input from the
terminal
char SegConvert(char SegValue); // function to convert a number to a 7-segment
byte
Slika 85: Definiranje prototipa funkcija

Koristi se MBED serijsko USB suelje za komunikaciju sa raunalom, i dva 7-


segmentna 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); // function prototype


void HostInit(void); // function prototype
char GetKeyInput(void); // function prototype
char SegConvert(char SegValue); // 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); // initialise to zero
Seg2=SegConvert(0); // 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(); // get keyboard data (note num. ascii range 0x30-0x39)
pc.printf("%c",c); // print ascii value to host PC terminal
return (c&0x0F); // 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 // if FUNCTIONS_H has not previously been


defined
#define FUNCTIONS_H // 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() { // 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
}
}
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); // initialise to zero
Seg2=SegConvert(0); // 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; // allow Seg1 to be manipulated by other files


extern BusOut Seg2; // allow Seg2 to be manipulated by other files

void SegInit(void); // function prototype


char SegConvert(char SegValue); // 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" // allow access to functions and objects in
SegDisplay.cpp

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(); // get keyboard data (note numerical ascii range 0x30-
0x39) pc.printf("%c",c); // print ascii value to host PC terminal
return (c&0x0F); // 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); // function prototype


char GetKeyInput(void); // 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 stvori objekt BusOut povezan sa definiranim izlaznim pinovima
write postavi vrijednost na izlaz sabirnice
read ita postavljeni izlaz na sabirnici
operator= skraenica za pisanje
operator int() 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. Naziv prikljuka Funkcija


1 VSS Napajanje (GND)
2 VDD Napajanje (5V)
3 V0 podeenje kontrasta
4 RS signal odabira registra
5 R/W itaj/pii
6 E signal omoguenja
7 DB0 sabirnica podataka bit 0
8 DB1 sabirnica podataka bit 1
9 DB2 sabirnica podataka bit 2
10 DB3 sabirnica podataka bit 3
11 DB4 sabirnica podataka bit 4
12 DB5 sabirnica podataka bit 5
13 DB6 sabirnica podataka bit 6
102
14 DB7 sabirnica podataka bit 7
15 A pozadinsko osv. (5V)
16 K 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 LCD
Naziv prikljuka Napajanje
prikljuak prikljuak
1 1 VSS 0V
39 2 VDD 5V
vanjski pot. 3 V0 cca 1V
19 4 RS
1 5 R/W 0V
20 6 E
21 11 DB4
22 12 DB5
23 13 DB6
24 14 DB7
39 15 A 5V
1 16 K 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); //rs,e,d0, d1,d2,d3


AnalogIn Ain(p17);
int percentage;

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 IC Master, koriten za komunikaciju sa IC 'slave' ureajima


Funkcija Koritenje
I2C Stvori IC Master suelje, povezano na specificirane prikljuke
frequency postavljanje frekvencije IC suelja
read prijem podatka sa IC slave
read itanje jednog bajta sa IC sabirnice
write predaja podataka na IC slave
write pisanje jednog bajta na IC sabirnicu
start stvaranje uvjeta za start na IC sabirnici
stop 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 SLAVE
NAIN RADA
TX_0 TX_1 RX_0 RX_1
Temperatura u
0xC0 podatak ->BOut INT-Temp (0-7) INT-Temp(8-9)
0,1 C
A/D (10 bita),
0xC1 podatak ->BOut Ain0 (0-7) Ain0 (8-9)
Uref = 1,5V
0xC2 podatak ->BOut 0x23 0x45 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 1

GND (0V) 1 20

SDA 9 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); //sda, sc1
Serial pc(USBTX, USBRX); //tx, rx
const int addr = 0x92;
char config_t[2]; // transmitt buffer
char temp_read[2]; // read buffer
float temp;
int main() {
while(1) {
config_t[0] = 0xC0; //config slave to int temp
config_t[1] = 0x55; // 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 SPI Master, koriten za komunikaciju sa SPI 'slave' ureajima


Funkcija Koritenje
SPI Oformi SPI mastera na specificiranim pinovima
format Konfiguriraj mod prijenosa podataka i duinu podataka
frequency Postavi frekvenciju takta sabirnice
write 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"); // open file for reading


read_var = fgetc(File2); // read first data value
fclose(File2); // close file
pc.printf("input value = %i \n",read_var); // 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"); // open file for reading
fgets(read_string,256,File2); // read first data value
fclose(File2); // close file
pc.printf("text data: %s \n",read_string); // 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 Prikljuak
MBED
LCD LCD
prikljuak, Napomena Boja ice u primjeru
zaslona, zaslona,
broj
ime broj
GND 1 1 GND Zelena
VDD 2 39 5V Naranasta
Vo 3 Potenciometar, OV Smea Plava
RS 4 20 Zelenoplava
R/W 5 GND Zelena
E 6 18 Naranasta
DB4 11 13 Zelena
DB5 12 12 Smea
DB6 13 11 Plava
DB7 14 10 Naranasta
8 Tipkalo, OV Zelenoplava Smea
5 Zelena LED dioda
6 Crvena LED dioda
21 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; //poetno stanje dioda
crvenaled=0;

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){ ///// pokretanje melodije
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
}
crvenaled=1;
zelenaled=0;
start=0;
}
}
}
Slika 148: Programski cpp kod za primjer

135
13. Literatura

1. "Embedded Systems Design Course: Applying the mbed microcontroller",


preuzeto 29.04.2014. s http://mbed.org/cookbook/Course-Notes
2. William Hohl: "ARM Assembly Language: Fundamentals and Techniques",
CRC Press, 2009., 371 str.
3. Joseph Yiu: "The Definitive Guide to the ARM Cortex-M3", Newness, 2011.,
384 str.
4. Bruce Eckel; Chuck Allison: "Thinking in C++: Practical Programming",
Prentice Hall, 2004., 806. str
5. Brian W. Kernighan; Dennis M. Ritchie: "C Programming Language",
Prentice Hall, 1988., 285 str.
6. Bert van Dam: "ARM Microcontrollers (part1) - 35 projects for beginners",
Elektor Verlag, 2010., 250 str.
7. Rob Toulson; Tim Wilmshurst: "Fast and Effective Embedded Systems
Design: Applying the ARM mbed", Newness, 2012., 373 str.

You might also like