TVZ Mechatronics Team


Zagreb University of Applied Sciences, Professional Study in Mechatronics

You are viewing an older revision! See the latest version

Uvodna vježba

Priprema

  1. Ako još niste, sada je pravo vrijeme da otvorite račun na Mbed-ovoj stranici. Za otvaranje računa potrebno je u gornjem desnom kutu odabrati opciju sign up kao što je prikazano na slijedećoj slici:
    /media/uploads/dfraj/otvaranje_racuna.jpg

  2. Nakon otvaranja računa pročitajte uvodni dio o mbed LPC1768 mikroupravljaču i dodajte navedeni mikroupravljač u vaš Mbed Compiler odabirom opcije Add to your Mbed Compiler (prikazano na slici).
    /media/uploads/dfraj/dodavnje_mikroupravljaca.jpg

  3. Spojite mikroupravljač na računalo. Ono će ga prepoznati kao prijenosnu memoriju (engl. memory stick). Provjerite je li na mikroupravljaču instaliran najnoviji firmware. Provjeru obavljate tako da na računalu otvorite mbed-ov direktorij, pronađete datoteku s .HTM ekstenzijom, te ju otvorite pomoću Notepad-a. /media/uploads/dfraj/direktorij.jpg

    Unutar navedene datoteke pronaći ćete oznaku firmware-a. Ako nije instaliran najnoviji firmware, instalirajte ga koristeći ove upute.

Napomena

Direktorij mikroupravljača na slici imenovan je MBED, međutim moguće je da mikroupravljač koji koristite neće biti tako imenovan zbog laboratorijskih vježbi iz kolegija "Komunikacijske tehnike u mehatronici" gdje ćete mikroupravljačima pridjeljivati uloge MASTER-a i SLAVE-a te ćete ih tako i imenovati.

Vježba

Riješite sljedećih nekoliko zadataka s ciljem upoznavanja s mbed razvojnom platformom NXP LPC1768:

Za ovu vježbu nije potrebno spajati vanjske LED-ice budući da mbed LPC1768 platforma ima četiri ugrađene LED-ice prikazane na slijedećoj slici oznakama od LED1 do LED4. Program s kojim ćete započeti ovu vježbu osnovni je blinky HelloWorld program kojim ćete omogućiti blinkanje LED-ice s oznakom LED1.

/media/uploads/dfraj/boardlayoutsmall.png

  1. Uvezite dolje prikazani HelloWorld program u Mbed Compiler. Klikom na ikonu Import Program u internet pregledniku otvara se nova kartica sa stranicom Mbed Compiler-a te slijedeći skočni prozor na kojem možete modificirati ime programa te ga na kraju uvesti u Mbed Compiler klikom na tipku Import.

    Import program

    00001 #include "mbed.h"
    00002 
    00003 DigitalOut myled(LED1);
    00004 
    00005 int main() {
    00006     while(1) {
    00007         myled = 1;
    00008         wait(0.2);
    00009         myled = 0;
    00010         wait(0.2);
    00011     }
    00012 }
    
    /media/uploads/dfraj/newprogram.jpg

  2. Nakon uvođenja i otvaranja programa (klikom na njegovo ime ) prozor Mbed Compiler-a će se podijeliti na tri dijela prikazana na slijedećoj slici. /media/uploads/dfraj/compiler.jpg

    Na lijevom dijelu prozora nalazi se stablo mapa u kojem su prikazane sve mape od kojih se sastoji program. Klikom na datoteku main.cpp otvara se program te se njegov programski kod prikazuje na gornjem desnom prozoru. Prevedite program odabirom Compile ikone u Mbed Compiler-u. Nakon prevođenja, u donjem desnom prozoru pojavit će se poruka o uspješnom ili neuspješnom prevođenju programa. Ako je riječ o neuspješnom prevođenju, u istom prozoru dobit ćete upozorenje u kojem dijelu programskog koda je došlo do greške. U slučaju uspješnog prevođenja pojavit će vam se skočni prozor s upitom gdje želite spremiti prevedeni program (.bin datoteka) ili će se datoteka s programom automatski spremiti na određeno mjesto na računalu. Spremljenu .bin datoteku prebacite u mbed-ov direktorij te pritiskom na tipkalo na vašem mikroupravljaču resetirat ćete isti i time pokrenuti zadnji program koji ste prebacili na njega, u ovom slučaju to je HelloWorld program.
  3. Pregledajte dokumentaciju klase DigitalOut. Uključite ili isključite bilo koju LED-icu koristeći funkciju write kao pripadnicu klase DigitalOut. Objasnite ulogu operator= u dokumentaciji klase. Dokumentaciju možete pregledati na dva načina:
    1. U Mbed Compiler-u, u stablu mapa nalazi se mbed biblioteka (ikona zupčanika). Klikom na navedenu mapu prikazuju se njene podmape te je potrebno otvoriti podmapu pod nazivom Classes. Unutar te podmape nalazi se popis i dokumentacija svih klasa koje se mogu koristiti.
    2. na ovom linku moguće je pronaći dokumentaciju za sve klase koje ćemo koristiti na ovom kolegiju (a i na KTM-u).
  4. Modificirajte program tako da blinka samo jedna od 3 preostale LED-ice (samo jedna LED-ica može blinkati).
  5. Modificirajte program tako da blinkaju 2 ili više LED-ica (gotovo) istovremeno.
  6. Kreirajte novi program. Svaki program može imati samo jednu main.cpp datoteku. Unutar mape vašeg programa nemojte dodavati nove datoteke s .cpp ekstenzijom. Za kreiranje novog programa potrebno je u izbornoj traci Mbed prevoditelja odabrati New (gore lijevo) te zatim izabrati New program.
    /media/uploads/dfraj/new.png

    Nakon toga otvoriti će se skočni prozor prikazan u nastavku:
    /media/uploads/dfraj/newprogram_WP1ffL4.jpg

    U njemu je potrebno podesiti postavke programa. Najprije je u polju Platform potrebno postaviti platformu za koju ćete pisati programski kod. U polju će se automatski odabrati platforma mbed LPC1768 budući da je trenutno samo ona dodana u compiler. Međutim, dodavanjem drugih platformi iz navedenog polja moći će se pomoću padajućeg izbornika odabrati željena platforma. U slijedećem polju nazvanom Template moguće je iz padajućeg izbornika odabrati izgled programa. Hoće li on biti potpuno prazan ili će imati predložak mbed OS Blinky LED HelloWorld kao u prvom zadatku. Potrebno je odabrati navedeni (i prikazani) mbed OS Blinky LED HelloWorld predložak budući da on osim programskog koda sadrži i sve osnovne biblioteke za mbed platforme koje bi u slučaju odabira praznog predloška morale biti ručno dodane. U zadnjem polju nazvanom Program Name potrebno je definirati naziv programa.
    /media/uploads/dfraj/newprogram01.jpg

    U ovom zadatku modificirajte program iz prethodnog zadatka tako da LED1 blinka 4 sekunde, nakon čega se LED1 isključuje, a počinje blinkati LED2 u trajanju od 4 sekunde. Zatim se isključuje LED2 i ciklus kreće ispočetka s LED1. Koristite while i for petlje u ovom zadatku.
  7. Deklarirajte i inicijalizirajte dvije konstantne realne varijable T_TOTAL i T_FLASH, koje će određivati ukupna vremena blinkanja pojedinih LED-ica iz prethodnog zadatka, kao i trajanje pojedinog blinka. Npr. postavite ukupno trajanje blinka pojedinih LED-ica T_TOTAL na 10 sekundi umjesto 4 i trajanje pojedinog blinka na 0,5 sekundi umjesto pretpostavljenih 0,2 sekunde. Ideja je promjene napraviti samo na ta dva mjesta, a ostatak kôda se mora pobrinuti za obavljanje zadatka.
  8. Kreirajte novi program koji sadrži jednu LED-icu i sljedeći uzorak blinkanja:
    1. LED-ica se najprije uključuje na vrijeme od 5 sekundi, zatim se isključuje na vrijeme od pola sekunde.
    2. Nakon toga se vrijeme uključenja smanjuje na 4 sekunde, uz fiksno vrijeme isključenja od pola sekunde.
    3. Ciklus se nastavlja dok vrijeme uključenja ne dosegne 1 sekundu, nakon čega kreće ponavljanje ciklusa od početka.
  9. Prethodni zadatak poopćite tako da vrijeme uključenja od 5 sekundi zamijenite proizvoljnim brojem sekundi (cijeli broj), a dekrement vremena uključenosti i dalje ostaje 1 sekunda.

Čestitke!

Završili ste sve zadatke iz teme Uvodna vježba. U nastavku laboratorijskih vježbi slijede i zanimljivije teme.

Povratak na naslovnu stranicu TVZ Mechatronics Team-a.

Dodatni zadaci za vježbu

Kao alat za vježbanje, testiranje i simuliranje programskih kodova koji će se obrađivati na ovom kolegiju, može se koristiti Mbed simulator. Simulatoru možete pristupiti preko ovog linka te on simulira rad mbed LPC1768 platforme. Pomoću navedenog simulatora moguće je testirati blinky HelloWorld program iz 1. zadatka, prekidne rutine (engl. Interrupts), pulsno širinsku modulaciju (engl. PWM - Pulse Width Modulation), komunikaciju s LCD zaslonom, temperaturnim senzorom itd., više o simulatoru i njegovom korištenju možete pročitati ovdje.

Binarni zapis

Kao što znamo brojevi u binarnom zapisu mogu poprimii samo dvije vrijednosti 0 ili 1 što kod mikroupravljača predstavlja nisko ili visoko stanje digitalnih izlaza i ulaza. U nastavku je prikazan oblik 4-bitnog binarnog zapisa kojim je moguće prikazati dekadske brojeve od 0 do 15. Potencije broja dva počinju s desne strane zapisa od bita s najmanjom težinom vrijednosti (engl. LSB - Least Significant Bit) gdje je potencija broja dva jednaka nuli te se povečavaju sa svakim slijedećim btiom i to rezultira bitom s najvećom težinom vrijednosti (engl. MSB - Most Significant Bit) koji se nalazi na lijevom kraju zapisa gdje potencija tj. vrijednost tog bita iznosi dva na treću tj. osam.

/media/uploads/dfraj/binarni_zapis.jpg

Klasa BusOut

Razlog zašto je gore ukratko objašnjen 4.bitni binarni zapis je taj da ćete se s tim zapisom susretatni na kolokvijima na ovom kolegiju, a i na laboratorijskim vježbama iz kolegija "Komunikacijske tehnike u mehatronici". Znanje korištenja tog zapisa testirat ćete pri radu s klasom BusOut. U nastavku će biti objašnjena samo inicijalizacija objekta navedene klase, a cijelu njenu dokumentaciju možete proučiti prema postupcima objašnjenim u 3. zadatku.

Inicijalizacija objekta BusOut klase biti će prikazana na primjeru programskog koda koji broji binarno od 0 do 15. Ako ovaj primjer testirate kod kuče i trenutno nemate pri ruci mbed LPC1768 platformu, navedeni program možete simulirati u prije spomenutom Mbed Simulatoru.

BusOut klasa omogućuje stvaranje sabirnice koja se sastoji od više digitalnih izlaza (u ovom slučaju četiri ugrađene ledice na platformi) kojima možemo istovremeno upravljati. Binarni zapis pri inicijalizaciji objekta klase BusOut zrcalna je slika standardnom binarnom zapisu. Stoga je potrebno kao prvi argument, u dolje prikazanom primjeru, objektu myleds klase BusOut predati naziv pina kojima se upravlja LED-icom LED4 jer taj argument predstavlja bit s najmanjom težinom vrijednosti (LSB), a zadnji argument (LED1) predstavlja bit s najvećom težinom vrijednosti.

Primjer programa za brojanje prikazan je u nastavku:

Brojanje od 0 do 15

#include "mbed.h"

                                   //LSB                                  MSB

BusOut myleds(LED4, LED3, LED2, LED1);

int main() {
    while(1) {
        for(int i = 0; i < 16; i++) {
            myleds = i;
            wait(0.5);
        }
    }
}

Bitwise operatori

BusOut - primjer rada bitwise operatora

#include "mbed.h"

BusOut myleds(LED4, LED3, LED2, LED1);
unsigned char a, b;

int main() {
    a = 5; // 00000101
    b = 9; // 00001001
    while(1) {
        myleds = a;         //00000101
        wait(1);
        myleds = b;         //00001001
        wait(1);
        myleds = a | b;     //00001101
        wait(1);
        myleds = a & b;     //00000001
        wait(1);
        myleds = a << 1;    //00001010
        wait(1);
        myleds = a >> 1;    //00000010
        wait(1);
    }
}

BusOut - paljenje LED-ice

#include "mbed.h"

BusOut ledice(LED4, LED3, LED2, LED1);

int main(){
    while(1){
       ledice = 0b1001;
       wait(2);
       ledice = ledice | (1<<1);
       wait(2);
    }
}

BusOut - gašenje LED-ice

#include "mbed.h"

BusOut ledice(LED4, LED3, LED2, LED1);

int main(){
    while(1){
       ledice = 13;
       wait(2);
       ledice = ledice & ~(1<<3);
       wait(2);
    }
}

Povratak na naslovnu stranicu TVZ Mechatronics Team-a.


All wikipages