You are on page 1of 16

Univerzitet u Niu

Elektronski fakultet
Katedra za Elektroniku


Mikrokontroleri
Mart 2012





UDP prenos signala


















Mentor: Student:
Prof.dr Branislav Petrovid Zdravko Dirid 12542
mbed UDP 2012

2 | S t r a n a

Sadraj

1. Zadatak ............................................................................................................................. 3
2. Uvod ................................................................................................................................. 4
2.1 Mbed razvojno okruenje .......................................................................................................... 4
2.2 UDP protokol .............................................................................................................................. 5
UDP zaglavlje....................................................................................................................... 5
2.3 mbed Biblioteka ......................................................................................................................... 6
2.4 Online compiler .......................................................................................................................... 7
Online Compiler IDE ............................................................................................................ 7
3. Hardver ............................................................................................................................. 9
3.1 Prototip za testiranje ................................................................................................................. 9
3.2 Ethernet modul na mbed ploici .............................................................................................. 10
4. Softver ............................................................................................................................ 11
4.1 Generator signala ..................................................................................................................... 11
Generator uma ................................................................................................................ 11
Generator impulsa ............................................................................................................ 12
4.2 UDP predajnik .......................................................................................................................... 13
5.Verifikacija rada ............................................................................................................... 16








mbed UDP 2012

3 | S t r a n a


1. Zadatak

Projektovati jednostavni UDP server pomou mbed razvojne ploe. Zadatak servera je da
kontinualno alje digitalni signal od 2000 uzoraka pri 12bit-noj rezoluciji odmeravanja. Signal
treba da se formira iz dva eksterna *.bin fajla (u FLASH memoriji mbed ploe): jedan sa
impulsnim signalom i jedan sa umom.
Impulsni signal je periodian i on se sabira sa umom, pri emu se nakon jednog slanja impulsni
signal sabira sa signalom uma pomerenim za jedan odmerak u desno. Ovako dobijen signal se
alje preko Ethernet modula na mbed ploi putem UDP protokola svake 1ms.








mbed UDP 2012

4 | S t r a n a

2. Uvod
2.1 Mbed razvojno okruenje

Mbed je serija razvojnih ploa bazirane na ARM mikrokontrolerima, koji su dizajnirani za brzo
projektovanje.
Mbed NXP LPC1768 mikrokontroler je
projektovan za izradu prototipova raznih ureaja,
naroito onih koji ukljuuju Ethernet, USB i
fleksibilnost brojnih perifernih interfejsa i FLASH
memoriju. Proizveden je u malom DIP pakovanju
za upotrebu sa raznim proto PCB ploama i
postoji ugraeni USB FLASH
programator/debager.
Zasnovan je na NXP LPC1768 mikrokontroleru,
sa 32-bitnim ARM Cortex-M3 jezrom koje radi na 96MHz. Sadri 512KB FLASH memorije,
64KB RAM i mnotvo interfejsa ukljuujui i ugraeni Ethernet, USB, CAN, SPI, I2C, ADC,
DAC, PWM i druge U/I interfejse. Slika iznad prikazuje esto koriene interfejse i njihovu
lokaciju. Uoite da se svi oznaeni pinovi (p5-p30) mogu koristiti i kao DigitalIn i DigitalOut
interfejsi.
Mbed mikrokontroleri pruaju iskusnim embedded programerima monu i produktivnu
platformu za izradu prototipova. Za programere neiskusne u oblasti 32-bitnih mikrokontrolera,
mbed prua pristupano reenje za izradu projekta uz raspoloive biblioteke, resurse i podrke
koju prua mbed zajednica.
Karakteristike
NXP LPC1768 MCU
ARM Cortex-M3 jezgro visokih performansi
96MHz, 32KB RAM, 512KB FLASH
Ethernet, USB Host/Device, 2xSPI, 2xI2C, 3xUART, CAN, 6xPWM, 6xADC, GPIO
40-pinsko DIP kudite, 54x26mm
5V USB ili 4.5-9V napajanje
Ugraen USB drag 'n' drop FLASH programator
Online Kompajler
C/C++ razvojno okruenje na visokom nivou
Primeri biblioteka i projekata

mbed UDP 2012

5 | S t r a n a


2.2 UDP protokol

User Datagram Protocol (UDP) je jedan od najvanijih lanova Internet Protocol Suite-a, skupa
mrenih protokola korienih za Internet. Sa UDP, kompjuterske aplikacije mogu da salju
poruke, u ovom sluaju se misli na datagrame, drugim host-ovima na Internet Protocol (IP)
mrei bez zahteva za podesavanje specijalnih transmisionih kanala ili staza podataka.
UDP se koristi za razmenu paketa poruka (datagrama) izmeu raunara. Za razliku od
protokola TCP, ovaj protokol ne podrazumeva stalnu vezu nego se paketi bacaju odredinom
raunaru, bez odravanja veze i provere greaka. Na taj nain, ovaj protokol ne garantuje
isporuku paketa niti isti redosled isporuke paketa kao pri slanju. Zbog ovih osobina UDP
protokol je brz i koristi se za aplikacije kojima je vana brzina a prispee paketa i odravanje
redosleda nije od velike vanosti, koristi ga veliki broj aplikacija, naroito multimedijalne
aplikacije poput internet telefonije i video konferencije. Koriste ga protokoli RTP, VoIP, DNS,
serveri za raunarske igre itd.
UDP aplikacije koriste datagram sokete kako bi uspostavili host-to-host komunikaciju.
Aplikacija vee soket za njegovim odreditem za slanje podataka, koje je kombinacija IP adrese i
servisnog porta.

UDP zaglavlje
UDP se sastoji od 4 polja, svako po 2B. Korienje dva od ovih etiri je opcionalno u IPv4 (roze
na tabeli). U IPv6 samo je izvorini port opcionalan.


mbed UDP 2012

6 | S t r a n a


2.3 mbed Biblioteka

Biblioteka koja omoguava lako podeavanje i kontrolu transmisije podataka preko Ethernet
modula na mbed ploi je EthernetNetI f. Sadri konfiguracije za razliite protokole kao i
nekoliko korisnih mrenih funkcija. Klasa koja je odredjena za UDP komunikaciju je UDP
Socket. U njoj su sve funkcije koje su koriene u ovom projektu radi uspostavljanja prenosa
podataka preko UDP-a.


















mbed UDP 2012

7 | S t r a n a

2.4 Online compiler

Mbed kompajler prua uproeni onlajn C/C++ IDE (integrated development environment) koji
je konfigurisan da obezbedi brzo pisanje programa, kompajliranje i njihovo download-ovanje na
mbed mikrokontroler. Nije potrebna nikakva dodatna instalacija ili podeavanje kako bi poeli
rad sa mbed-om. Poto je mrena aplikacija, moete se logovati sa bilo kog mesta i nastaviti gde
ste stali, na bilo kojem operativnom sistemu.
Iako je onlajn i uproen, takodje je i veoma moan. Kompajler koristi profesionalni ARMCC
kompajlerski endin, tako da pravi efikasan kd koji moe biti korien bez naplate, ak i u
komercijalnim primenama. IDE ukljuuje kontrolu verzije, formatiranje kda i auto-generisanje
dokumentacije za objavljene biblioteke. Mbed alati su fokusirani na prototip a dizajnirani su za
brzo eksperimentisanje, i upotpunjuju ostale profesionalne alate.
Moete direktno objaviti projekte iz radnog prostora kompajlera na sajt mbed.org kako bi
podelili kd sa drugima, a isto tako moete uneti postojee biblioteke u va radni prostor kako bi
imali poetnu prednost.
Online Compiler IDE

IDE ukljuuje puni editor kda koji sadri sintaksno naglaavanje, standardne editorske preice
na tastaturi, kopiraj/nalepi, tabove i ak i automatsko formatiranje kda. Ovde radite na linom
radnom prostoru, sa vie fajlova, folderima, programima, ukljuujui i drag and drop interfejs:






mbed UDP 2012

8 | S t r a n a

Import wizard omoguava ukljuivanje programa sa mbed URL-a. Ovo je korisno za
ukljuivanje kda koji je pakovan kao biblioteka komponenta koja se moe ponovo koristiti,
tako da moete brzo ukljuiti blokove za va projekat.


Programe ili biblioteke moete pronai na mbed sajtu, u
import wizardu ili moete koristiti poznati URL.
Kompajler IDE vam takodje omoguava da objavite vae
programe ili biblioteke na mbed sajtu u code section, tako da
moete lako podeliti vae dostignue (ili probleme) sa
drugima.
Kada kompajlirate program, dobiete prikaz korienja
memorije. Ovo prikazuje veliinu programskog kda i svake
const varijable koja e zavriti u FLASH-u, i veliinu
varijable podataka koje e zavriti u RAM-u.




mbed UDP 2012

9 | S t r a n a

3. Hardver
3.1 Prototip za testiranje

Kao to se na slici levo vidi, prototip je
zaista uproen. Na ploici su samo mbed
razvojna ploa i RJ45 utinica.






Koriena utinica je bez integrisanih
transformatora za odvajanje (Straight jack) i
poloaj odgovarajuih pinova je prikazan na
slici desno.
Na slici ispod je prikazan deo mbed ploice sa
pinovima namenjenim za Ethernet. Kao to se
vidi sa slika, korienjem mbed razvojne
ploice jako je lako pripremiti prototip plou
koju moemo koristiti za bilo kakvu vrstu Ethernet komunikacije (UDP, TCP...).




mbed UDP 2012

10 | S t r a n a


3.2 Ethernet modul na mbed ploici














mbed UDP 2012

11 | S t r a n a

4. Softver
4.1 Generator signala

Za potreba testiranja UDP prenosa signala nisu
korieni digitalni signali sa A/D konvertora ve
su generisani samim kontrolerom. Signali su
smeteni u nizove sa 2000 polja, svako po 2B
(zbog 12bit-nih vrednosti). Nakon popunjavanja
ovih nizova sve vrednosti se piu u fajl sa
ekstenzijom *.bin koji se nalazi na eksternoj
memoriji na mbed ploici. Generisana su dva
binarna fajla iji je sadraj prikazan na slici
desno.
Kod generisanja fajla sa impulsnim signalom
potrebno je podesiti broj impulsa koji elimo i
duinu njegovog trajanja.
Kod generisanja uma iskoriena je rand()
funkcija i njen rezultat se maskira sa 0x01FF
kako bi vrednosti uma ostale ispod magine od
512LSB.
Generator uma

#include "mbed.h"
#define STR_LENGTH 2000

LocalFileSystem mbedFile("mbed");
unsigned short str[STR_LENGTH];

int main() {

for (int i=0;i<STR_LENGTH;i++){
str[i]=rand()&0x01FF;
}

FILE *fp = fopen("/mbed/noise.bin", "w");
fwrite (str, 2,STR_LENGTH, fp );
fclose(fp);
}

mbed UDP 2012

12 | S t r a n a


Generator impulsa

#include "mbed.h"
#define STR_LENGTH 2000
#define NO_IMPULSE 4
#define PER_LENGTH STR_LENGTH/NO_IMPULSE
#define IMP_LENGTH 25

LocalFileSystem mbedFile("mbed");
unsigned short str[STR_LENGTH];

int main() {

for (int i=0;i<NO_IMPULSE;i++){
for (int j=0;j<PER_LENGTH;j++){
if((PER_LENGTH-IMP_LENGTH)<=j & j<=PER_LENGTH){
str[i*PER_LENGTH+j]=0x0FFF;
}else{
str[i*PER_LENGTH+j]=0x0000;
}
}
}

FILE *fp = fopen("/mbed/impulse.bin", "w");
fwrite (str, 2,STR_LENGTH, fp );
fclose(fp);
}




















mbed UDP 2012

13 | S t r a n a

4.2 UDP predajnik

Fajl UDP.cpp je podeljen na celine i svaka od njih e biti objanjena u nastavku.
Ukljuivanje potrebnih biblioteka , definisanje duine niza (u bajtovima) za signale i deklaracija
lokalnog fajl sistema na mbed ploici.
#include "mbed.h"
#include "EthernetNetIf.h"
#include "UDPSocket.h"

#define STR_LENGTH 4000

LocalFileSystem mbedFile("mbed");

Sledi podeavanje IP adrese, mrene maske, gateway-a i DNS-a za mbed a potom i podeavanje
IP adrese i porta uredjaja koji e da primi signale.

EthernetNetIf eth(
IpAddr(160,99,11,55), //IP Address
IpAddr(255,255,255,0), //Network Mask
IpAddr(160,99,11,250), //Gateway
IpAddr(160,99,12,230) //DNS
);
Host local(IpAddr(160,99,11,56), 80);

U nastavku su prikazane globalne promenljive i deklaracija tajmera (koji inicira prenos svake
1ms) kao i UDP soketa.

Ticker timer;
UDPSocket udp;

char impulse[STR_LENGTH];
char noise[STR_LENGTH];
char sum[STR_LENGTH];
int p=0;

Sledee dve funkcije imaju zadatak da podese pokaziva na odgovarajuu poziciju u nizu sa
umom, pri tom, funkcija circBuffRead() prebacuje pokaziva na poetak ako je premaena
duina niza dok f-ja incPtr() inkrementira pokaziva za 2 pozicije kako bi pokazivao na sledei
odmerak digitalnog signala.

char circBuffRead(int n){
if(n<STR_LENGTH){
return noise[n];
}else{
return noise[n-STR_LENGTH];
}
}


mbed UDP 2012

14 | S t r a n a

void incPtr(){
if(p<STR_LENGTH-2){
p=p+2;
}else{
p=0;
}
}

Najvanija funkcija je svakako sigAdd(). U njoj se odvija sabiranje impulsa i pomerenog uma
(za vrednost pokazivaa p). Nakon sabiranja se inkrementira pokaziva na niz sa umom i
dobijeni niz se alje preko UDP-a pomou funkcije udp.send().

void sigAdd(){
for(int i=0; i<STR_LENGTH; i++){
sum[i]= impulse[i] | circBuffRead(i+p);
}
incPtr();
udp.sendto( sum, STR_LENGTH, &local);
Net::poll();
}

Inicijalizacija Etherneta se vri funkcijom ethSetup() koja poziva funkciju eth.setup() iz
EthernetNetIf biblioteke. Funkcija eth.setup() vraa broj greke u sluaju da je doslo do greke u
konfigurisanju i to se ispisuje preko serijske konekcije na raunar povezan sa mbed-om. U
suprotnom se ispisuje Setup OK. Funkcija udp.bind() vezuje soket na ranije definisani host.

void ethSetup(){
printf("Setting up...\n");
EthernetErr ethErr = eth.setup();
if(ethErr)
{
printf("Error %d in setup.\n", ethErr);
}
printf("Setup OK\n");
udp.bind(local);
}

Dva fajla koji sadre signale se uitavaju u odredjene nizove na sledei nain:

void readFiles(){
FILE *fp1 = fopen("/mbed/noise.bin", "r");
fread(noise, 1, STR_LENGTH, fp1);
fclose(fp1);

FILE *fp2 = fopen("/mbed/impulse.bin", "r");
fread(impulse, 1, STR_LENGTH, fp2);
fclose(fp2);
}






mbed UDP 2012

15 | S t r a n a

Poto su sve glavne operacije smetene u funkcije, glavna petlja ja dosta uproena. Prvo se
vezuje prekid na tajmer koji e na svakih 1000us pozivati funkciju za sabiranje i slanje podataka.
Zatim se isti na kratko vreme iskljuuje kako bi se uitali signali i podesio ethernet. I na kraju je
jedna beskonana petlja koja radi poll-ing mree.

int main() {
timer.attach_us(&sigAdd,1000);

NVIC_DisableIRQ(TIMER3_IRQn);
readFiles();
ethSetup();
NVIC_EnableIRQ(TIMER3_IRQn);

while(true)
{
Net::poll();
}
}































mbed UDP 2012

16 | S t r a n a

5.Verifikacija rada

Nakon to su podeene IP adrese za mbed i odredini raunar, razvojna ploa se moe povezati
mrenim kablom na eljeni raunar. Korien je softver za nadgledanje protoka podataka preko
Ethernet-a (Wireshark) na raunaru koji e primiti signale. Analiza pristiglih podataka je oteana
usled injenice da posmatramo digitalne signale.



Prvo to se vidi sa slike iznad jesu IP adrese. Levo je adresa mbed ploe a desno odredita,
odnosno raunara. U istom redu vidimo da je prenos podataka izmedju ova dva uredjaja u skladu
sa UDP protokolom. U delu gde se opisuje pristigli frejm uoava se vremenska razlika izmedju
pristiglih podataka koja je u skladu sa zahtevima. U donjem delu je naznaeno da smo primili
4000B to odgovara poslatom signalu (2000 uzoraka, svaki po 2B). I na kraju, skroz dole je
prikazan signal preveden u ASCII formu. Analizom susednih pristiglih signala moe se uoiti da
se um pomera za jednu poziciju a da impuls ostaje nepromenjen.

You might also like