Professional Documents
Culture Documents
Mikroupravljači Skripte V8 PDF
Mikroupravljači Skripte V8 PDF
Ljubivoj Cvita
Ljubivoj Cvita
Sadraj
1. UVOD ............................................................................................................................................ 8
2. UVOD U MIKROUPRAVLJAE......................................................................................................... 9
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
3
Popis slika
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
3. Pulsno-irinska modulacija
9. Tajmeri i prekidi
8
2. Uvod u mikroupravljae
Slika 1: Mikroupravljai
9
Meutim, postoji razlika izmeu mikroprocesora i mikroupravljaa:
Slika 2: Mikroprocesor
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.
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.
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.
cijena
13
raspoloivost
razvojni alati
podrka proizvoaa
14
2.2.3. Kriteriji izbora mikroupravljaa
Cijena?
2. Dostupnost hardvera?
Da li je u sadanjoj proizvodnji?
Izgledi u budunosti?
Asembleri
Prevoditelji (Compilers)
Podrka za primjenu
Financijsko izvjee
15
2.2.4. Zadani zahtjevi sustava
Koliki broj bita mikroupravlja treba imati (8, 16, 32...) kako bi se mogao
implementirati algoritam dovoljne izlazne preciznosti?
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.
Cijena
Tajmeri
A/D i D/A
16
Zahtjevi na napajanje
17
Slika 9: Tehnologija 'Rapid Prototyping'
18
Online4 kompajler
19
softverska apstrakcija omoguuje eksperimentiranje bez poznatih
mikroupravljakih detalja.
20
Slika 13: Proces rada MBED-a
21
Raunalo prepoznaje MBED modul kao vanjski ureaj za podatkovnu pohranu,
tj. 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.
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.
23
Slika 18: Otvaranje projekta u radnom prostoru
24
Slika 20: Pohrana '.bin' datoteke na MBED USB disk
25
2.3.3. Hardverske mogunosti modula MBED LPC1768
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.
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.
27
Funkcija i mogunosti hardverskih prikljunih signala MBED-a LPC1768
prikazani su u tablici 1:
Signal Opis
GND Uzemljenje
VB Napajanje od 3V za RTC
nR Glavni reset
28
3. Digitalni ulazi i izlazi
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"
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
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
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.
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
Kreirajte novi program za vanjski LED projekt i unesite sljedei cpp kod (slika 28);
#include "mbed.h"
DigitalOut redled(p5);
DigitalOut greenled(p6);
int main() {
while(1) {
redled = 1;
greenled = 0;
wait(0.2);
redled = 0;
greenled = 1;
wait(0.2);
}
}
Slika 28: Primjer cpp koda za LED projekt
33
Slika 30 Y-t oscilogram izlaza na p5 i p6
34
Slika 31 Pojaala digitalnih izlaza
35
3.2. Digitalni ulazi MBED-a
DigitalIn ulaz1(p5);
DigitalIn ulaz2(p6);
DigitalIn prekidac(p7);
Slika 32: Definiranje digitalnog ulaza
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
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
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);
}
}
}
38
Vjeba 3-3: LED projekt sa 4 prekidaa koritenjem API komponente
BusInOut
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
}
}
}
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.
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
41
Analogni ulazi i izlazi MBED-a
42
Analogni ulazi i izlazi MBED-a
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.
43
Analogni ulazi i izlazi MBED-a
44
Analogni ulazi i izlazi MBED-a
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:
#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
45
Analogni ulazi i izlazi MBED-a
46
Analogni ulazi i izlazi MBED-a
47
Analogni ulazi i izlazi MBED-a
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
'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.
#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
50
Analogni ulazi i izlazi MBED-a
51
Analogni ulazi i izlazi MBED-a
#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
Promijenite kod i kreirajte signal glatkog pilastog valnog oblika, uvoenjem finijih
koraka u petlju.
52
Analogni ulazi i izlazi MBED-a
Kreirajte signal glatkog trokutastog valnog oblika uvoenjem druge petlje koja broji
unatrag.
53
5. Pulsno-irinska modulacija
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.
54
sustavi imaju odgovarajue karakteristike koje, u stvarnosti, djeluju kao
niskopropusni filteri.
VDD
Uul D
Iiz
55
mogue spojiti 6 PWM izlaza (pinovi 21-26). Svi PwmOut izlazi dijele isto vrijeme
periode (slika 56).
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
57
Vjeba 5-2: Upravljanje LED osvjetljenjem pomou PWM-a
#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%
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
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.
Servo zahtjeva vee struje nego to USB standard omoguuje, stoga je bitno da
je servo napajan koristei vanjsko napajanje od 4 baterije AA (6V).
59
Vjeba 5-3: Upravljanje servo motorom
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.
60
Vjeba 5-6: Hrvatska himna
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
62
6. Tajmeri i prekidi
Upoznavanje s tajmerima11
63
Za obavljanje 'programiranja prema rasporedu' koristi se MBED Timer objekt.
64
#include "mbed.h"
65
Potrebno je definirati drugi tajmer objekt, digitalni izlaz i zadatak funkcije
prototipa.
66
6.2. Uporaba MBED 'Ticker' objekta
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
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
68
Tablica 11: Funkcija 'InterruptIn'
Napomena: svaki digitalni ulaz moe se koristiti kao prekid osim pinova 19 i 20
#include "mbed.h"
InterruptIn button(p18); // Interrupt on digital pushbutton input p18
DigitalOut led1(p5); // digital out to p5
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
69
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.
#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
71
7. Dizajn modula i tehnike programiranja
Funkcije i potprogrami
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;
}
Iako prikazani primjer cpp koda djeluje sloen, u izvrnom dijelu to je vrlo
jednostavna operacija, meutim:
74
definiran je velik broj digitalnih izlaza
to ako elimo prikazati broj koji je dobiven kao rezultat kalkulacije ili
izrauna?
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.
#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
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.
#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
77
7.3. C funkcije
Ova funkcija koristi C 'switch/case' naredbu koja se izvrava identino kao 'if'
naredba, ali sa zadanim moguim uvjetima
: 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
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.
80
U svakom programu postoji main() funkcija, kojom se definira kod glavnog
programa
Napiite program koji ita dvoznamenkasti broj uneen na tipkovnici i ispisuje taj
broj na 7-segmentnom zaslonu.
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) {
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)
}
83
Slika 88: Modularno programiranje
#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
85
// template for .h file
// functions.h file
Vano je spomenuti, ovdje nije potrebno definirati specifine MBED prikljuke, jer
oni su ve specificirani u objektnoj deklaraciji u 'functions.cpp'
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.
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).
Datoteka 'main.cpp' zadrava isti glavni funkcijski kod kao i prije, ali poziva
(#include) ukljuene nove datoteka zaglavlja.
#include "mbed.h"
#include "HostIO.h"
#include "SegDisplay.h"
#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
}
#ifndef SEGDISPLAY_H
#define SEGDISPLAY_H
#include "mbed.h"
#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'.
#include "HostIO.h"
#include "SegDisplay.h" // allow access to functions and objects in
SegDisplay.cpp
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
#ifndef HOSTIO_H
#define HOSTIO_H
#include "mbed.h"
extern Serial pc; // allow pc to be manipulated by other files
#endif
Slika 99: Datoteka 'HostIO.h' za vjebu 7-7
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.
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.
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.
#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
}
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.
Izabrat emo prvi nain. Moda to za ovaj primjer nije najbolje rjeenje, ali je u
praksi najee.
Stvorit emo klasu i nazvati je Flasher koja, kada je kreirana, postavlja DigitalOut
pin, te osigurava metodu treperenja na tom pinu kao to je prikazano na slici 102:
92
#include "mbed.h"
class Flasher {
public:
Flasher(PinName pin) : _pin(pin) {
// _pin(pin) means pass pin to the DigitalOut constructor
_pin = 0; // default the output to 0
}
void flash(int n) {
for(int i=0; i<n*2; i++) {
_pin = !_pin;
wait(0.2);
}
}
private:
DigitalOut _pin;
};
Flasher led(LED2);
Flasher out(p6);
int main() {
led.flash(5);
led.flash(2);
out.flash(10);
}
Pomou tog koda moemo stvoriti objekt Flasher povezan na izabrani pin, i
narediti mu da treperi. Naravno da pri tom moemo jednostavno stvoriti razliite
bljeskalice na razliitim izlaznim pinovima.
To jest sve malo kompleksnije, ali vano je naglasiti da taj uloeni dodatni napor
pretvaranja ovog korisnog koda u klasu rezultira jednostavnou njegovog
koritenja u razliitim programima.
93
Zajedno sa trudom koji smo uloili da bi se ovaj kod mogao viekratno koristiti,
vjerojatno bismo htjeli olakati njegovo ukljuivanje u druge programe. Da bismo to
uinili, moemo staviti kod u vlastite datoteke koje jednostavno mogu biti ukljuene
u druge programe.
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
#include "Flasher.h"
#include "mbed.h"
void Flasher::flash(int n) {
for(int i=0; i<n*2; i++) {
_pin = !_pin;
wait(0.2);
}
}
94
Slika 104:Datoteka Flasher.cpp
#include "mbed.h"
#include "Flasher.h"
Flasher led(LED2);
int main() {
led.flash(5);
led.flash(2);
}
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".
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:
97
8. Paralelni podaci i komunikacija
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
#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
100
Vjeba 8-2: Knightrider LED efekt sa BusOut objektom
#include "mbed.h"
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.
Hardverska integracija
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).
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
#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
https://developer.mbed.org/cookbook/Text-LCD-Enhanced#new-features
lcd.locate(3,1);
Slika 118: Odabir eljene pozicije na LCD zaslonu
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.
lcd.cls();
Slika 119: Brisanje postojeeg sadraja LCD zaslona
x = 1028
lcd.printf("%i",x);
#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
#include "mbed.h"
#include "TextLCD.h"
int main() {
while(1){
percentage=Ain*100;
lcd.printf("%i",percentage);
wait(0.002);
lcd.cls();
}
}
Slika 122: Primjer prikazivanja analognih ulaznih podataka na LCD-u
Dodatni zadatak
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
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.
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.
'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'.
110
Slika 125: Prijenos podataka kod jednostavne IC komunikacije
IC na MBED-u
Tablica 16:Funkcija IC
111
Slika 126: IC prikljuci na MBED-u
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.
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.
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.
114
Slika 129: Povezivanje MSPG_I2C_SLAVE sa MBED-om
VCC (3,3V) 40 1
GND (0V) 1 20
115
Vjeba 9-1: Upotreba MSPG_I2C_SLAVE modula
#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
116
9.3. Povezivanje vie ureaja na IC sabirnicu
#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);
Dodatne vjebe
118
10. Serijska komunikacija sa SPI-om
119
U sluaju kada postoji vie 'slave' ureaja, 'master' mora davati jedinstveni izlazni
CS signal za svaki 'slave'.
Stoga, kod SPI-a postoje etiri moda, tj. naina rada prama slici 133.
120
Slika 135: Modovi rada kod SPI komunikacije
121
SPI na MBED-u
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.
123
Slika 138: Tipovi elektronike memorije
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.
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.
125
pisanje podataka (eng. write)
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).
fclose(pFile);
Slika 141: Naredba 'fclose' za zatvaranje datoteka
127
Podaci se oitavaju iz datoteke u varijabli na sljedei nain:
read_var = fgetc(pFile);
Slika 143: Naredba 'fgetc' omoguuje itanje podataka
128
Vjeba 11-1: Stvaranje datoteke i upis
#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
#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
#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
Kreirajte program koji od korisnika trai unos teksta u aplikaciju terminala. Kada
korisnik pritisne tipku Enter (na tipkovnici), tekst se sprema u datoteku na MBED.
131
12. Upotreba MBED mikroupravljaa u praksi
TVZ > SPEC ELO > Dipl.> Zadatak > E334> **MBED** > Tomislav > Hadrovic
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.
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.
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);
//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;
135
13. Literatura